From: Sergey Glukhov Date: June 20 2011 8:03am Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3648) Bug#12634989 List-Archive: http://lists.mysql.com/commits/139489 X-Bug: 12634989 Message-Id: <201106200813.p5K8DmY5017128@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============8864516764133537694==" --===============8864516764133537694== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/gluh/MySQL/mysql-5.1/ based on revid:marko.makela@stripped 3648 Sergey Glukhov 2011-06-20 Bug#12634989 VALGRIND WARNING ABOUT UNINITIALIZED VALUES CREATED IN ITEM_FUNC_DAYOFMONTH added missing null value check for functions SUBSTRING, LEFT, RIGHT, REPEAT, LPAD, RPAD. @ mysql-test/r/func_str.result test case @ mysql-test/t/func_str.test test case @ sql/item_strfunc.cc added missing null value check for functions SUBSTRING, LEFT, RIGHT, REPEAT, LPAD, RPAD. modified: mysql-test/r/func_str.result mysql-test/t/func_str.test sql/item_strfunc.cc === modified file 'mysql-test/r/func_str.result' --- a/mysql-test/r/func_str.result 2011-01-13 07:57:15 +0000 +++ b/mysql-test/r/func_str.result 2011-06-20 08:03:47 +0000 @@ -2628,4 +2628,43 @@ SELECT * FROM t1; a aaaaaaaaaaaaaa DROP TABLE t1; +# +# Bug#12634989 VALGRIND WARNING ABOUT UNINITIALIZED VALUES CREATED IN ITEM_FUNC_DAYOFMONTH +# +SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1))); +SUBSTRING('1', DAY(FROM_UNIXTIME(-1))) +NULL +SELECT LEFT('1', DAY(FROM_UNIXTIME(-1))); +LEFT('1', DAY(FROM_UNIXTIME(-1))) +NULL +SELECT RIGHT('1', DAY(FROM_UNIXTIME(-1))); +RIGHT('1', DAY(FROM_UNIXTIME(-1))) +NULL +SELECT REPEAT('1', DAY(FROM_UNIXTIME(-1))); +REPEAT('1', DAY(FROM_UNIXTIME(-1))) +NULL +SELECT RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?'); +RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') +NULL +SELECT LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?'); +LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') +NULL +CREATE TABLE t1 +SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1))) AS f1, +LEFT('1', DAY(FROM_UNIXTIME(-1))) AS f2, +RIGHT('1', DAY(FROM_UNIXTIME(-1))) AS f3, +REPEAT('1', DAY(FROM_UNIXTIME(-1))) AS f4, +RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') AS f5, +LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') AS f6; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` varchar(1) DEFAULT NULL, + `f2` varchar(1) DEFAULT NULL, + `f3` varchar(1) DEFAULT NULL, + `f4` longtext, + `f5` longtext, + `f6` longtext +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/t/func_str.test' --- a/mysql-test/t/func_str.test 2011-01-13 07:57:15 +0000 +++ b/mysql-test/t/func_str.test 2011-06-20 08:03:47 +0000 @@ -1380,4 +1380,25 @@ LOAD DATA INFILE 'bug58165.txt' INTO TAB SELECT * FROM t1; DROP TABLE t1; +--echo # +--echo # Bug#12634989 VALGRIND WARNING ABOUT UNINITIALIZED VALUES CREATED IN ITEM_FUNC_DAYOFMONTH +--echo # + +SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1))); +SELECT LEFT('1', DAY(FROM_UNIXTIME(-1))); +SELECT RIGHT('1', DAY(FROM_UNIXTIME(-1))); +SELECT REPEAT('1', DAY(FROM_UNIXTIME(-1))); +SELECT RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?'); +SELECT LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?'); + +CREATE TABLE t1 +SELECT SUBSTRING('1', DAY(FROM_UNIXTIME(-1))) AS f1, + LEFT('1', DAY(FROM_UNIXTIME(-1))) AS f2, + RIGHT('1', DAY(FROM_UNIXTIME(-1))) AS f3, + REPEAT('1', DAY(FROM_UNIXTIME(-1))) AS f4, + RPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') AS f5, + LPAD('hi', DAY(FROM_UNIXTIME(-1)),'?') AS f6; +SHOW CREATE TABLE t1; +DROP TABLE t1; + --echo End of 5.1 tests === modified file 'sql/item_strfunc.cc' --- a/sql/item_strfunc.cc 2011-05-16 20:04:01 +0000 +++ b/sql/item_strfunc.cc 2011-06-20 08:03:47 +0000 @@ -1162,7 +1162,10 @@ void Item_str_func::left_right_max_lengt max_length=args[0]->max_length; if (args[1]->const_item()) { - int length=(int) args[1]->val_int()*collation.collation->mbmaxlen; + int length=(int) args[1]->val_int(); + if (args[1]->null_value) + return; + length*= collation.collation->mbmaxlen; if (length <= 0) max_length=0; else @@ -1266,6 +1269,8 @@ void Item_func_substr::fix_length_and_de if (args[1]->const_item()) { int32 start= (int32) args[1]->val_int(); + if (args[1]->null_value) + goto end; if (start < 0) max_length= ((uint)(-start) > max_length) ? 0 : (uint)(-start); else @@ -1274,11 +1279,15 @@ void Item_func_substr::fix_length_and_de if (arg_count == 3 && args[2]->const_item()) { int32 length= (int32) args[2]->val_int(); + if (args[2]->null_value) + goto end; if (length <= 0) max_length=0; /* purecov: inspected */ else set_if_smaller(max_length,(uint) length); } + +end: max_length*= collation.collation->mbmaxlen; } @@ -2404,6 +2413,8 @@ void Item_func_repeat::fix_length_and_de { /* must be longlong to avoid truncation */ longlong count= args[1]->val_int(); + if (args[1]->null_value) + goto end; /* Assumes that the maximum length of a String is < INT_MAX32. */ /* Set here so that rest of code sees out-of-bound value as such. */ @@ -2417,12 +2428,12 @@ void Item_func_repeat::fix_length_and_de maybe_null= 1; } max_length= (ulong) max_result_length; + return; } - else - { - max_length= MAX_BLOB_WIDTH; - maybe_null= 1; - } + +end: + max_length= MAX_BLOB_WIDTH; + maybe_null= 1; } /** @@ -2492,6 +2503,8 @@ void Item_func_rpad::fix_length_and_dec( if (collation.collation->mbmaxlen > 0) { ulonglong temp= (ulonglong) args[1]->val_int(); + if (args[1]->null_value) + goto end; /* Assumes that the maximum length of a String is < INT_MAX32. */ /* Set here so that rest of code sees out-of-bound value as such. */ @@ -2507,12 +2520,12 @@ void Item_func_rpad::fix_length_and_dec( maybe_null= 1; } max_length= (ulong) length; + return; } - else - { - max_length= MAX_BLOB_WIDTH; - maybe_null= 1; - } + +end: + max_length= MAX_BLOB_WIDTH; + maybe_null= 1; } @@ -2609,6 +2622,8 @@ void Item_func_lpad::fix_length_and_dec( if (collation.collation->mbmaxlen > 0) { ulonglong temp= (ulonglong) args[1]->val_int(); + if (args[1]->null_value) + goto end; /* Assumes that the maximum length of a String is < INT_MAX32. */ /* Set here so that rest of code sees out-of-bound value as such. */ @@ -2624,12 +2639,12 @@ void Item_func_lpad::fix_length_and_dec( maybe_null= 1; } max_length= (ulong) length; + return; } - else - { - max_length= MAX_BLOB_WIDTH; - maybe_null= 1; - } + +end: + max_length= MAX_BLOB_WIDTH; + maybe_null= 1; } --===============8864516764133537694== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/sergey.glukhov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped\ # aub9n7zuxu9qmlo7 # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: 89708926b6cb29c33ef12ce0140288e622055da4 # timestamp: 2011-06-20 12:03:53 +0400 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1/ # base_revision_id: marko.makela@stripped\ # ys8b6h6s77wurhuf # # Begin bundle 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 --===============8864516764133537694==--