Bug #19741 | segfault with cp1250 charset + like + primary key + 64bit os | ||
---|---|---|---|
Submitted: | 11 May 2006 20:55 | Modified: | 12 Sep 2006 0:44 |
Reporter: | pavel stano | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Charsets | Severity: | S2 (Serious) |
Version: | 4.1.19 | OS: | 64bit linux |
Assigned to: | Alexander Barkov | CPU Architecture: | Any |
[11 May 2006 20:55]
pavel stano
[14 May 2006 21:06]
Tonci Grgin
Hi Pavel. Thanks for your bug report. I was able to verify it exactly like you described. My environment: MySQL 4.1.20 bk build FC5x64 AMDx64 3GB RAM Terminal in iso-8859-2 Server started with no defaults 060514 21:29:08 mysqld started 060514 21:29:09 InnoDB: Started; log sequence number 0 43634 /home/tonci/mysql4-1/libexec/mysqld: ready for connections. Version: '4.1.20-debug' socket: '/tmp/mysql.sock' port: 3306 Source distribution mysql> use test; mysql> set names latin2; mysql> create table a (a varchar(15) collate cp1250_czech_cs NOT NULL, primary key(a)); mysql> insert into a values("abcdefghá"); mysql> insert into a values("ááčč"); mysql> SELECT a FROM a WHERE a LIKE "abcdefghá"; ERROR 2013 (HY000): Lost connection to MySQL server during query Error log: mysqld got signal 11; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly built, or misconfigured. This error can also be caused by malfunctioning hardware. We will try our best to scrape up some info that will hopefully help diagnose the problem, but since we have already crashed, something is definitely wrong and this may fail. key_buffer_size=8388572 read_buffer_size=131072 max_used_connections=1 max_connections=100 threads_connected=1 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 225788 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Number of processes running now: 0 060514 21:48:47 mysqld restarted 060514 21:48:48 InnoDB: Started; log sequence number 0 43634 /home/tonci/mysql4-1/libexec/mysqld: ready for connections. Version: '4.1.20-debug' socket: '/tmp/mysql.sock' port: 3306 Source distribution I've tested without "set names...", same crash happens.
[20 Jun 2006 20:03]
pavel stano
i debug this bug on mysql 5.0.22 and i think i found the problem, here is backtrace #0 0x0000366e3b905c83 in pthread_kill () from /lib64/tls/libpthread.so.0 #1 0x0000000000521b1a in handle_segfault (sig=11) at mysqld.cc:2094 #2 <signal handler called> #3 0x00000000006bb15a in my_like_range_win1250ch (cs=0xa05e00, ptr=0x4007d848 "á", ptr_length=1, escape=92 '\\', w_one=95 '_', w_many=37 '%', res_length=15, min_str=0xa91578 "Ť", max_str=0xa91587 "ions.MYI", min_length=0x4007d7f8, max_length=0xffffffe1) at ctype-win1250ch.c:639 #4 0x00000000005ca616 in get_mm_leaf (param=0x4007ddd0, conf_func=0x9, field=0xa658c0, key_part=0xa9157f, type=BETWEEN, value=0x4007d840) at sql_string.h:90 #5 0x00000000005ca19c in get_mm_parts (param=0x4007ddd0, cond_func=0xa8f428, field=0xa658c0, type=LIKE_FUNC, value=0xa8f330, cmp_type=37) at opt_range.cc:3838 #6 0x00000000005c977b in get_func_mm_tree (param=0x4007ddd0, cond_func=0xa8f428, field=0xa658c0, value=0xa8f330, cmp_type=STRING_RESULT, inv=false) at opt_range.cc:3623 #7 0x00000000005c9eb6 in get_mm_tree (param=0x4007ddd0, cond=0xa658c0) at opt_range.cc:3792 #8 0x00000000005c6522 in SQL_SELECT::test_quick_select (this=0xac9aa8, thd=0xa73d30, keys_to_use= {map = 4609150658637164514}, prev_tables=0, limit=0, force_quick_range=false) at opt_range.cc:1848 if you look at function my_like_range in libmysql/ctype-win1250ch.c on line 639 *min_str = like_range_prefix_min_win1250ch[(uint)(*ptr)]; when mysqld crash, *ptr was "á" like_range_prefix_min_win1250ch is an array of chars the problem is that (uint)(*ptr)=4294967265 it is because *ptr is signed char and "á"=-31 converted to unsigned int = 4294967265 when you change *ptr to unsigned char then it dont crash, because unsigned char *ptr="á"==225 but i dont know why it dont crash on 32bit OS on vanila mysql there is a possibility that i am wrong :)
[25 Jul 2006 12:28]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/9534
[11 Sep 2006 11:10]
Alexander Barkov
Merged into 5.1.12
[12 Sep 2006 0:44]
Paul DuBois
Noted in 4.1.22, 5.0.25, 5.1.12 changelogs. On 64-bit systems, use of the cp1250 character set with a primary key column in a LIKE clause caused a server crash for patterns having letters in the range 128..255.