Commit 90924fcb authored by jimw@mysql.com's avatar jimw@mysql.com

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

allowed unintended overflows. (Bug #10351)
parent 72a6c71d
...@@ -60,9 +60,6 @@ a b ...@@ -60,9 +60,6 @@ a b
3 a 3 a
4 a 4 a
5 a 5 a
SELECT @@MAX_SEEKS_FOR_KEY;
@@MAX_SEEKS_FOR_KEY
4294967295
analyze table t1; analyze table t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 analyze status OK test.t1 analyze status OK
......
...@@ -526,14 +526,10 @@ ERROR HY000: Variable 'warning_count' is a read only variable ...@@ -526,14 +526,10 @@ ERROR HY000: Variable 'warning_count' is a read only variable
set @@global.error_count=1; set @@global.error_count=1;
ERROR HY000: Variable 'error_count' is a read only variable ERROR HY000: Variable 'error_count' is a read only variable
set @@max_heap_table_size= 4294967296; set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size; select @@max_heap_table_size > 0;
@@max_heap_table_size @@max_heap_table_size > 0
4294967296 1
set global max_heap_table_size= 4294967296; set global max_heap_table_size= 4294967296;
select @@max_heap_table_size; select @@global.max_heap_table_size > 0;
@@max_heap_table_size @@global.max_heap_table_size > 0
4294967296 1
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
...@@ -56,7 +56,6 @@ SELECT * from t1; ...@@ -56,7 +56,6 @@ SELECT * from t1;
# #
# Test MAX_SEEKS_FOR_KEY # Test MAX_SEEKS_FOR_KEY
# #
SELECT @@MAX_SEEKS_FOR_KEY;
analyze table t1; 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"); 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; explain select STRAIGHT_JOIN * from t1,t1 as t2 where t1.b=t2.b;
......
...@@ -408,11 +408,9 @@ set @@warning_count=1; ...@@ -408,11 +408,9 @@ set @@warning_count=1;
set @@global.error_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; set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size; select @@max_heap_table_size > 0;
set global max_heap_table_size= 4294967296; set global max_heap_table_size= 4294967296;
select @@max_heap_table_size; select @@global.max_heap_table_size > 0;
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
...@@ -5371,7 +5371,7 @@ The minimum value for this variable is 4096.", ...@@ -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", "Limit assumed max number of seeks when looking up rows based on a key",
(gptr*) &global_system_variables.max_seeks_for_key, (gptr*) &global_system_variables.max_seeks_for_key,
(gptr*) &max_system_variables.max_seeks_for_key, 0, GET_ULONG, (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, {"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).", "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, (gptr*) &global_system_variables.max_sort_length,
......
...@@ -1422,6 +1422,12 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var) ...@@ -1422,6 +1422,12 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{ {
ulonglong tmp= var->save_result.ulonglong_value; 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=.. */ /* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset) if ((ulong) tmp > max_system_variables.*offset)
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