Commit ae154449 authored by Tor Didriksen's avatar Tor Didriksen

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.
parent da0c7297
......@@ -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 */
......
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