Commit 120e80f1 authored by unknown's avatar unknown

Fix for handling of unsigned long options on 32-bit platforms that

allowed unintended overflows. (Bug #10351)


mysql-test/r/select_safe.result:
  Update results
mysql-test/r/variables.result:
  Update results
mysql-test/t/select_safe.test:
  Remove "SELECT @@MAX_SEEKS_FOR_KEY;" because it depends on
  size of unsigned long of the system.
mysql-test/t/variables.test:
  Fix test for #10351 to test the actual problem
sql/mysqld.cc:
  Undo unnecessary change to default and max of max_seeks_for_key
sql/set_var.cc:
  On platforms where SIZEOF_LONG != SIZEOF_LONGLONG, make sure to handle
  max values for ulong-sized options correctly.
parent c055edc6
......@@ -60,9 +60,6 @@ a b
3 a
4 a
5 a
SELECT @@MAX_SEEKS_FOR_KEY;
@@MAX_SEEKS_FOR_KEY
4294967295
analyze table t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
......
......@@ -526,14 +526,10 @@ ERROR HY000: Variable 'warning_count' is a read only variable
set @@global.error_count=1;
ERROR HY000: Variable 'error_count' is a read only variable
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
select @@max_heap_table_size > 0;
@@max_heap_table_size > 0
1
set global max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
select @@global.max_heap_table_size > 0;
@@global.max_heap_table_size > 0
1
......@@ -56,7 +56,6 @@ SELECT * from t1;
#
# Test MAX_SEEKS_FOR_KEY
#
SELECT @@MAX_SEEKS_FOR_KEY;
analyze table t1;
insert into t1 values (null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a"),(null,"a");
explain select STRAIGHT_JOIN * from t1,t1 as t2 where t1.b=t2.b;
......
......@@ -408,11 +408,9 @@ set @@warning_count=1;
set @@global.error_count=1;
#
# Bug #10351: Setting max_heap_table_size to 4G fails
# Bug #10351: Setting ulong variable to > MAX_ULONG fails on 32-bit platform
#
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
select @@max_heap_table_size > 0;
set global max_heap_table_size= 4294967296;
select @@max_heap_table_size;
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
select @@global.max_heap_table_size > 0;
......@@ -5371,7 +5371,7 @@ The minimum value for this variable is 4096.",
"Limit assumed max number of seeks when looking up rows based on a key",
(gptr*) &global_system_variables.max_seeks_for_key,
(gptr*) &max_system_variables.max_seeks_for_key, 0, GET_ULONG,
REQUIRED_ARG, UINT_MAX32, 1, UINT_MAX32, 0, 1, 0 },
REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0 },
{"max_sort_length", OPT_MAX_SORT_LENGTH,
"The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored).",
(gptr*) &global_system_variables.max_sort_length,
......
......@@ -1422,6 +1422,12 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
#if SIZEOF_LONG != SIZEOF_LONGLONG
/* Avoid overflow on 32-bit platforms. */
if (tmp > ULONG_MAX)
tmp= ULONG_MAX;
#endif
/* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset)
tmp= max_system_variables.*offset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment