Bug#12340997 - DATE_ADD/DATE_SUB WITH INTERVAL CRASHES IN GET_INTERVAL_VALUE()
get_interval_value() was trying to parse the input string, looking for leading '-' while skipping whitespace. The macro my_isspace() does not work for utf16 character set, since my_charset_utf16_general_ci.ctype == NULL. Solution: convert input to ASCII before parsing. mysql-test/r/ctype_utf16.result: New test case. mysql-test/t/ctype_utf16.test: New test case. sql/item_timefunc.cc: Use val_string_ascii() rather than val_string() so that we can safely use my_isspace() for skipping whitespace.
This commit is contained in:
parent
da0c7297ba
commit
ae154449f1
@ -1117,5 +1117,14 @@ CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END
|
||||
b
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#12340997
|
||||
# DATE_ADD/DATE_SUB WITH INTERVAL CRASHES IN GET_INTERVAL_VALUE()
|
||||
#
|
||||
SELECT space(date_add(101, INTERVAL CHAR('1' USING utf16) hour_second));
|
||||
space(date_add(101, INTERVAL CHAR('1' USING utf16) hour_second))
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1301 Result of repeat() was larger than max_allowed_packet (1048576) - truncated
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
@ -755,6 +755,13 @@ INSERT INTO t1 VALUES ('a');
|
||||
SELECT CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#12340997
|
||||
--echo # DATE_ADD/DATE_SUB WITH INTERVAL CRASHES IN GET_INTERVAL_VALUE()
|
||||
--echo #
|
||||
|
||||
SELECT space(date_add(101, INTERVAL CHAR('1' USING utf16) hour_second));
|
||||
|
||||
#
|
||||
## TODO: add tests for all engines
|
||||
#
|
||||
|
@ -1430,7 +1430,7 @@ bool get_interval_value(Item *args,interval_type int_type,
|
||||
else
|
||||
{
|
||||
String *res;
|
||||
if (!(res=args->val_str(str_value)))
|
||||
if (!(res= args->val_str_ascii(str_value)))
|
||||
return (1);
|
||||
|
||||
/* record negative intervalls in interval->neg */
|
||||
|
Loading…
x
Reference in New Issue
Block a user