summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mysql.com>2010-03-04 15:00:32 +0400
committerAlexander Barkov <bar@mysql.com>2010-03-04 15:00:32 +0400
commit922cdddeb0d4b536c81c0b4995ee965ae36b5e15 (patch)
treeabbce4ba908fdc0d13da5be0f0881ef25537361b /strings
parenta75a9eb1331a293e9dfe119c6b19dfdb330d957f (diff)
downloadmariadb-git-922cdddeb0d4b536c81c0b4995ee965ae36b5e15.tar.gz
A joint patch for:
Bug#51675 Server crashes on inserting 4 byte char. after ALTER TABLE to 'utf8mb4' Bug#51676 Server crashes on SELECT, ORDER BY on 'utf8mb4' column include/m_ctype.h: Defining MY_CS_REPLACEMENT_CHARACTER mysql-test/r/ctype_utf8mb4.result: Adding tests mysql-test/t/ctype_utf8mb4.test: Adding tests strings/ctype-uca.c: Don't use UCA data for characters higher than 0xFFFF. strings/ctype-ucs2.c: Using newly defined MY_CS_REPLACEMENT_CHARACTER strings/ctype-utf8.c: Using newly defined MY_CS_REPLACEMENT_CHARACTER Removing unesed variable "plane".
Diffstat (limited to 'strings')
-rw-r--r--strings/ctype-uca.c2
-rw-r--r--strings/ctype-ucs2.c6
-rw-r--r--strings/ctype-utf8.c7
3 files changed, 6 insertions, 9 deletions
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index 7dbec5a1321..b6d413432ed 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -6983,6 +6983,8 @@ static int my_uca_scanner_next_any(my_uca_scanner *scanner)
scanner->send)) <= 0))
return -1;
+ if (wc > 0xFFFF)
+ wc= MY_CS_REPLACEMENT_CHARACTER;
scanner->page= wc >> 8;
scanner->code= wc & 0xFF;
scanner->sbeg+= mb_len;
diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c
index 6de0ea8f7e8..e3e13af85ef 100644
--- a/strings/ctype-ucs2.c
+++ b/strings/ctype-ucs2.c
@@ -50,8 +50,6 @@
static unsigned long lfactor[9]=
{ 1L, 10L, 100L, 1000L, 10000L, 100000L, 1000000L, 10000000L, 100000000L };
-#define REPLACEMENT_CHAR 0xFFFD;
-
#ifdef HAVE_CHARSET_mb2_or_mb4
@@ -1145,7 +1143,7 @@ my_tosort_utf16(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
}
else
{
- *wc= REPLACEMENT_CHAR;
+ *wc= MY_CS_REPLACEMENT_CHARACTER;
}
}
@@ -1874,7 +1872,7 @@ my_tosort_utf32(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
}
else
{
- *wc= REPLACEMENT_CHAR;
+ *wc= MY_CS_REPLACEMENT_CHARACTER;
}
}
diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c
index 7de5cdd00ee..ace39130c12 100644
--- a/strings/ctype-utf8.c
+++ b/strings/ctype-utf8.c
@@ -1720,9 +1720,6 @@ MY_UNICASE_INFO *my_unicase_turkish[256]=
};
-#define REPLACEMENT_CHAR 0xFFFD;
-
-
static inline void
my_tosort_unicode(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
{
@@ -1734,7 +1731,7 @@ my_tosort_unicode(MY_UNICASE_INFO **uni_plane, my_wc_t *wc)
}
else
{
- *wc= REPLACEMENT_CHAR;
+ *wc= MY_CS_REPLACEMENT_CHARACTER;
}
}
@@ -1757,7 +1754,7 @@ my_wildcmp_unicode(CHARSET_INFO *cs,
{
int result= -1; /* Not found, using wildcards */
my_wc_t s_wc, w_wc;
- int scan, plane;
+ int scan;
int (*mb_wc)(struct charset_info_st *, my_wc_t *,
const uchar *, const uchar *);
mb_wc= cs->cset->mb_wc;