天天看點

[MySQL Bug]Bug#13986705 CRASH IN GET_INTERVAL_VALUE() WITH DATE CALCULATION WITH UTF32 INTERVALS

upstream link:

<a href="http://bazaar.launchpad.net/~mysql/mysql-server/5.5/revision/3840">http://bazaar.launchpad.net/~mysql/mysql-server/5.5/revision/3840</a>

test case:

select space(date_add(101, interval (cast(char(‘1′ using utf16) as char(1)))hour_second))

隻影響5.5

根據crash的backtrace

program received signal sigsegv, segmentation fault.

[switching to thread 0x7ffff4643700 (lwp 5874)]

0x0000000000706602 in get_interval_value (args=0x7fff84004e98, int_type=interval_hour_second, str_value=&lt;value optimized out&gt;, interval=0x7ffff4640c40)

    at /u01/project/ps5518/trunk/percona-server-5.5.18/sql/item_timefunc.cc:1460

1460        while (str != end &amp;&amp; my_isspace(cs,*str))

在my_isspace(cs,*str)這裡crash,my_isspace是一個宏:

#define my_isspace(s, c)  (((s)-&gt;ctype+1)[(uchar) (c)] &amp; _my_spc)

而對于utf16(my_charset_utf16_general_ci)或者utf32(my_charset_utf32_general_ci)類型的字元集,ctype為null(ctype-ucs2.c)

是以這裡直接導緻段錯誤。

<a href="http://bazaar.launchpad.net/~mysql/mysql-server/5.5/revision/3840">官方patch</a>

solution: convert input to ascii before parsing,

and use the character set of the returned ascii string. 

.

繼續閱讀