diff options
author | Chaithra Gopalareddy <chaithra.gopalareddy@oracle.com> | 2013-01-31 07:06:30 +0530 |
---|---|---|
committer | Chaithra Gopalareddy <chaithra.gopalareddy@oracle.com> | 2013-01-31 07:06:30 +0530 |
commit | dbd25312fea9cabf6542fb938d9b163114cab0fd (patch) | |
tree | 1f2823b8fb0a8f32272d481872e4c058ae82e5d0 | |
parent | d92a7cb76a6d7c9b53334152abfa8ee93e8fd171 (diff) | |
parent | e1ee9581cb4a4cac085d0ad6eedadb73de187deb (diff) | |
download | mariadb-git-dbd25312fea9cabf6542fb938d9b163114cab0fd.tar.gz |
Bug#14096619: UNABLE TO RESTORE DATABASE DUMP
Backport of fix for Bug#13581962
mysql-test/r/cast.result:
Added test result for Bug#13581962,Bug#14096619
mysql-test/r/ctype_utf8mb4.result:
Added test result for Bug#13581962,Bug#14096619
mysql-test/t/cast.test:
Added test case for Bug#13581962,Bug#14096619
mysql-test/t/ctype_utf8mb4.test:
Added test case for Bug#13581962,Bug#14096619
sql/item_func.h:
limit max length by MY_INT64_NUM_DECIMAL_DIGITS
-rw-r--r-- | mysql-test/r/cast.result | 18 | ||||
-rw-r--r-- | mysql-test/r/ctype_utf8mb4.result | 18 | ||||
-rw-r--r-- | mysql-test/t/cast.test | 13 | ||||
-rw-r--r-- | mysql-test/t/ctype_utf8mb4.test | 15 | ||||
-rw-r--r-- | sql/item_func.h | 19 |
5 files changed, 75 insertions, 8 deletions
diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result index 736ef12968a..dd27a3bd0aa 100644 --- a/mysql-test/r/cast.result +++ b/mysql-test/r/cast.result @@ -477,4 +477,22 @@ WHERE CAST(a as BINARY)=x'62736D697468' AND CAST(a AS BINARY)=x'65736D697468'; a DROP TABLE t1; +# +# Bug#13581962 HIGH MEMORY USAGE ATTEMPT, THEN CRASH WITH +# LONGTEXT, UNION, USER VARIABLE +# Bug#14096619 UNABLE TO RESTORE DATABASE DUMP +# +CREATE TABLE t1 AS SELECT CONCAT(CAST(REPEAT('9', 1000) AS SIGNED)), +CONCAT(CAST(REPEAT('9', 1000) AS UNSIGNED)); +Warnings: +Warning 1292 Truncated incorrect INTEGER value: '99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' +Warning 1292 Truncated incorrect INTEGER value: '99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `CONCAT(CAST(REPEAT('9', 1000) AS SIGNED))` varchar(21) NOT NULL DEFAULT '', + `CONCAT(CAST(REPEAT('9', 1000) AS UNSIGNED))` varchar(21) NOT NULL DEFAULT '' +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; +# End of test for Bug#13581962, Bug#14096619 End of 5.1 tests diff --git a/mysql-test/r/ctype_utf8mb4.result b/mysql-test/r/ctype_utf8mb4.result index 3b9abbc5412..c7084134cd3 100644 --- a/mysql-test/r/ctype_utf8mb4.result +++ b/mysql-test/r/ctype_utf8mb4.result @@ -2539,6 +2539,24 @@ t2 CREATE TABLE `t2` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1, t2; # +# Bug#13581962 HIGH MEMORY USAGE ATTEMPT, THEN CRASH WITH +# LONGTEXT, UNION, USER VARIABLE +# Bug#14096619 UNABLE TO RESTORE DATABASE DUMP +# +CREATE TABLE t1(f1 LONGTEXT CHARACTER SET utf8mb4); +INSERT INTO t1 VALUES ('a'); +SELECT @a:= CAST(f1 AS SIGNED) FROM t1 +UNION ALL +SELECT CAST(f1 AS SIGNED) FROM t1; +@a:= CAST(f1 AS SIGNED) +0 +0 +Warnings: +Warning 1292 Truncated incorrect INTEGER value: 'a' +Warning 1292 Truncated incorrect INTEGER value: 'a' +DROP TABLE t1; +# End of test for Bug#13581962,Bug#14096619 +# # End of 5.5 tests # # diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test index 3ba684a9b25..150ab9b4dd8 100644 --- a/mysql-test/t/cast.test +++ b/mysql-test/t/cast.test @@ -307,4 +307,17 @@ WHERE CAST(a as BINARY)=x'62736D697468' DROP TABLE t1; +--echo # +--echo # Bug#13581962 HIGH MEMORY USAGE ATTEMPT, THEN CRASH WITH +--echo # LONGTEXT, UNION, USER VARIABLE +--echo # Bug#14096619 UNABLE TO RESTORE DATABASE DUMP +--echo # + +CREATE TABLE t1 AS SELECT CONCAT(CAST(REPEAT('9', 1000) AS SIGNED)), + CONCAT(CAST(REPEAT('9', 1000) AS UNSIGNED)); +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--echo # End of test for Bug#13581962, Bug#14096619 + --echo End of 5.1 tests diff --git a/mysql-test/t/ctype_utf8mb4.test b/mysql-test/t/ctype_utf8mb4.test index 03696f385b5..fda20ca0ec5 100644 --- a/mysql-test/t/ctype_utf8mb4.test +++ b/mysql-test/t/ctype_utf8mb4.test @@ -1812,6 +1812,21 @@ SHOW CREATE TABLE t2; DROP TABLE t1, t2; --echo # +--echo # Bug#13581962 HIGH MEMORY USAGE ATTEMPT, THEN CRASH WITH +--echo # LONGTEXT, UNION, USER VARIABLE +--echo # Bug#14096619 UNABLE TO RESTORE DATABASE DUMP +--echo # + +CREATE TABLE t1(f1 LONGTEXT CHARACTER SET utf8mb4); +INSERT INTO t1 VALUES ('a'); +SELECT @a:= CAST(f1 AS SIGNED) FROM t1 +UNION ALL +SELECT CAST(f1 AS SIGNED) FROM t1; +DROP TABLE t1; + +--echo # End of test for Bug#13581962,Bug#14096619 + +--echo # --echo # End of 5.5 tests --echo # diff --git a/sql/item_func.h b/sql/item_func.h index b897dcfaaaa..49e99f7194b 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -480,12 +480,18 @@ public: class Item_func_signed :public Item_int_func { public: - Item_func_signed(Item *a) :Item_int_func(a) {} + Item_func_signed(Item *a) :Item_int_func(a) + { + unsigned_flag= 0; + } const char *func_name() const { return "cast_as_signed"; } longlong val_int(); longlong val_int_from_str(int *error); void fix_length_and_dec() - { fix_char_length(args[0]->max_char_length()); unsigned_flag=0; } + { + fix_char_length(min(args[0]->max_char_length(), + MY_INT64_NUM_DECIMAL_DIGITS)); + } virtual void print(String *str, enum_query_type query_type); uint decimal_precision() const { return args[0]->decimal_precision(); } }; @@ -494,14 +500,11 @@ public: class Item_func_unsigned :public Item_func_signed { public: - Item_func_unsigned(Item *a) :Item_func_signed(a) {} - const char *func_name() const { return "cast_as_unsigned"; } - void fix_length_and_dec() + Item_func_unsigned(Item *a) :Item_func_signed(a) { - fix_char_length(min(args[0]->max_char_length(), - DECIMAL_MAX_PRECISION + 2)); - unsigned_flag=1; + unsigned_flag= 1; } + const char *func_name() const { return "cast_as_unsigned"; } longlong val_int(); virtual void print(String *str, enum_query_type query_type); }; |