summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mysql.com>2010-03-04 16:02:30 +0400
committerAlexander Barkov <bar@mysql.com>2010-03-04 16:02:30 +0400
commit79cecfb55e88ef92fc854559a1491f5d3ef38f57 (patch)
tree169ae072d87a08012ff7bba42bea4074261cbcfa /strings
parent19bda05a3c75c1f41b24506d02b3cdb05d8cc071 (diff)
downloadmariadb-git-79cecfb55e88ef92fc854559a1491f5d3ef38f57.tar.gz
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 An additional fix. We should use 0xFFFD as a weight for supplementary characters, not the "weight for character U+FFFD".
Diffstat (limited to 'strings')
-rw-r--r--strings/ctype-uca.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index b6d413432ed..beacf4f02c4 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -6983,11 +6983,18 @@ 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;
+ if (wc > 0xFFFF)
+ {
+ /* Return 0xFFFD as weight for all characters outside BMP */
+ scanner->wbeg= nochar;
+ return 0xFFFD;
+ }
+ else
+ {
+ scanner->page= wc >> 8;
+ scanner->code= wc & 0xFF;
+ }
if (scanner->contractions && !scanner->page &&
(scanner->code > 0x40) && (scanner->code < 0x80))