Skip to content

Commit

Permalink
Bug #11755818 : LIKE DOESN'T MATCH WHEN CP932_BIN/SJIS_BIN
Browse files Browse the repository at this point in the history
                COLLATIONS ARE USED.

ISSUE :
-------
Code points of HALF WIDTH KATAKANA in SJIS/CP932 range from
A1 to DF. In function my_wildcmp_mb_bin_impl while comparing
such single byte code points, there is a code which compares
signed character with unsigned character. Because of this,
comparisons of two same code points representing a HALF
WIDTH KATAKANA character always fails.

Solution:
---------
A code point of HALF WIDTH KATAKANA at-least need 8 bits.
Promoting the variable from uchar to int will fix the issue.
  • Loading branch information
mithuncy committed Aug 12, 2014
1 parent b9bc2bd commit 471569e
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
35 changes: 35 additions & 0 deletions mysql-test/r/ctype_cp932.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#
# Bug #11755818 LIKE DOESN'T MATCH WHEN CP932_BIN/SJIS_BIN COLLATIONS ARE
# USED.
#
SET @old_character_set_client= @@character_set_client;
SET @old_character_set_connection= @@character_set_connection;
SET @old_character_set_results= @@character_set_results;
SET character_set_client= 'utf8';
SET character_set_connection= 'utf8';
SET character_set_results= 'utf8';
CREATE TABLE t1 (a VARCHAR(10) COLLATE cp932_bin);
INSERT INTO t1 VALUES('カカ');
SELECT * FROM t1 WHERE a LIKE '%カ';
a
カカ
SELECT * FROM t1 WHERE a LIKE '_カ';
a
カカ
SELECT * FROM t1 WHERE a LIKE '%_カ';
a
カカ
ALTER TABLE t1 MODIFY a VARCHAR(100) COLLATE sjis_bin;
SELECT * FROM t1 WHERE a LIKE '%カ';
a
カカ
SELECT * FROM t1 WHERE a LIKE '_カ';
a
カカ
SELECT * FROM t1 WHERE a LIKE '%_カ';
a
カカ
DROP TABLE t1;
SET @@character_set_client= @old_character_set_client;
SET @@character_set_connection= @old_character_set_connection;
SET @@character_set_results= @old_character_set_results;
29 changes: 29 additions & 0 deletions mysql-test/t/ctype_cp932.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
-- source include/have_cp932.inc
--echo #
--echo # Bug #11755818 LIKE DOESN'T MATCH WHEN CP932_BIN/SJIS_BIN COLLATIONS ARE
--echo # USED.
--echo #

SET @old_character_set_client= @@character_set_client;
SET @old_character_set_connection= @@character_set_connection;
SET @old_character_set_results= @@character_set_results;
SET character_set_client= 'utf8';
SET character_set_connection= 'utf8';
SET character_set_results= 'utf8';

CREATE TABLE t1 (a VARCHAR(10) COLLATE cp932_bin);
INSERT INTO t1 VALUES('カカ');
SELECT * FROM t1 WHERE a LIKE '%カ';
SELECT * FROM t1 WHERE a LIKE '_カ';
SELECT * FROM t1 WHERE a LIKE '%_カ';

ALTER TABLE t1 MODIFY a VARCHAR(100) COLLATE sjis_bin;
SELECT * FROM t1 WHERE a LIKE '%カ';
SELECT * FROM t1 WHERE a LIKE '_カ';
SELECT * FROM t1 WHERE a LIKE '%_カ';
DROP TABLE t1;

## Reset to initial values
SET @@character_set_client= @old_character_set_client;
SET @@character_set_connection= @old_character_set_connection;
SET @@character_set_results= @old_character_set_results;
4 changes: 2 additions & 2 deletions strings/ctype-mb.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
/* Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -1044,7 +1044,7 @@ static int my_wildcmp_mb_bin_impl(CHARSET_INFO *cs,
}
if (*wildstr == w_many)
{ /* Found w_many */
uchar cmp;
int cmp;
const char* mb = wildstr;
int mb_len=0;

Expand Down

0 comments on commit 471569e

Please sign in to comment.