Commit c9fc9f73 authored by Sergei Golubchik's avatar Sergei Golubchik

lp:923429 Crash in decimal_cmp on using UNIX_TIMESTAMP with a wrongly formatted timestamp

UNIX_TIMESTAMP() can be null, and returns null for invalid values
parent f93da174
......@@ -587,3 +587,16 @@ Variable_name Value
Handler_read_next 1
DROP TABLE t1, t2;
End of 5.1 tests
#
# lp:923429 Crash in decimal_cmp on using UNIX_TIMESTAMP with a wrongly formatted timestamp
#
SELECT UNIX_TIMESTAMP('abc') > 0;
UNIX_TIMESTAMP('abc') > 0
NULL
Warnings:
Warning 1292 Incorrect datetime value: 'abc'
SELECT UNIX_TIMESTAMP('abc');
UNIX_TIMESTAMP('abc')
NULL
Warnings:
Warning 1292 Incorrect datetime value: 'abc'
......@@ -410,3 +410,10 @@ SHOW STATUS LIKE 'Handler_read_next';
DROP TABLE t1, t2;
--echo End of 5.1 tests
--echo #
--echo # lp:923429 Crash in decimal_cmp on using UNIX_TIMESTAMP with a wrongly formatted timestamp
--echo #
SELECT UNIX_TIMESTAMP('abc') > 0;
SELECT UNIX_TIMESTAMP('abc');
......@@ -1134,15 +1134,7 @@ bool Item_func_unix_timestamp::get_timestamp_value(my_time_t *seconds,
MYSQL_TIME ltime;
if (get_arg0_date(&ltime, 0))
{
/*
We have to set null_value again because get_arg0_date will also set it
to true if we have wrong datetime parameter (and we should return 0 in
this case).
*/
null_value= args[0]->null_value;
return 1;
}
uint error_code;
*seconds= TIME_to_timestamp(current_thd, &ltime, &error_code);
......
......@@ -385,11 +385,6 @@ public:
Item_func_unix_timestamp(Item *a) :Item_func_seconds_hybrid(a) {}
const char *func_name() const { return "unix_timestamp"; }
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
void fix_num_length_and_dec()
{
maybe_null= false;
Item_func_seconds_hybrid::fix_num_length_and_dec();
}
/*
UNIX_TIMESTAMP() depends on the current timezone
(and thus may not be used as a partitioning function)
......
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