Hi Øystein,
Patch looks fine and solves the problem. OK to push!
Minor comment (feel free to ignore): I think we normally prefer to have
the SQL statements in our test files in upper case.
Thanks for fixing this bug.
Olav
On 10/20/10 01:34 PM, Oystein Grovlen wrote:
> #At file:///home/og136792/mysql/mysql-5.5/ based on
> revid:alexander.nozdrin@stripped
>
> 3089 Oystein Grovlen 2010-10-20
> Bug#57512 str_to_date crash...
>
> str_to_date function should only try to generate a warning for invalid input
> strings, not when input value is NULL. In latter case, val_str() of input
> argument
> will return a nil pointer. Trying to generate a warning using this pointer
> lead
> to a segmentation fault. Solution: Only generate warning when pointer to
> input
> string is non-nil.
> @ mysql-test/r/func_time.result
> Added test case for Bug#57512
> @ mysql-test/t/func_time.test
> Added test case for Bug#57512
> @ sql/item_timefunc.cc
> Skip generating warning when pointer to input string is nil since this
> implies that
> input argument was NULL.
>
> modified:
> mysql-test/r/func_time.result
> mysql-test/t/func_time.test
> sql/item_timefunc.cc
> === modified file 'mysql-test/r/func_time.result'
> --- a/mysql-test/r/func_time.result 2010-09-09 12:02:02 +0000
> +++ b/mysql-test/r/func_time.result 2010-10-20 11:34:00 +0000
> @@ -1316,3 +1316,12 @@ SELECT 1 FROM t1 ORDER BY @x:=makedate(a
> 1
> DROP TABLE t1;
> End of 5.1 tests
> +#
> +# Bug#57512 str_to_date crash...
> +#
> +select week(str_to_date(null,0));
> +week(str_to_date(null,0))
> +NULL
> +select subdate(str_to_date(null,0),interval 1 hour);
> +subdate(str_to_date(null,0),interval 1 hour)
> +NULL
>
> === modified file 'mysql-test/t/func_time.test'
> --- a/mysql-test/t/func_time.test 2010-08-16 07:11:57 +0000
> +++ b/mysql-test/t/func_time.test 2010-10-20 11:34:00 +0000
> @@ -833,3 +833,11 @@ SELECT 1 FROM t1 ORDER BY @x:=makedate(a
> DROP TABLE t1;
>
> --echo End of 5.1 tests
> +
> +--echo #
> +--echo # Bug#57512 str_to_date crash...
> +--echo #
> +
> +select week(str_to_date(null,0));
> +select subdate(str_to_date(null,0),interval 1 hour);
> +
>
> === modified file 'sql/item_timefunc.cc'
> --- a/sql/item_timefunc.cc 2010-09-07 06:45:00 +0000
> +++ b/sql/item_timefunc.cc 2010-10-20 11:34:00 +0000
> @@ -3435,7 +3435,7 @@ bool Item_func_str_to_date::get_date(MYS
> return 0;
>
> null_date:
> - if (fuzzy_date& TIME_NO_ZERO_DATE)
> + if (val&& (fuzzy_date& TIME_NO_ZERO_DATE))
> {
> char buff[128];
> strmake(buff, val->ptr(), min(val->length(), sizeof(buff)-1));
>
>
>
>
>
>