diff options
author | Alexander Barkov <bar@mysql.com> | 2010-03-04 16:02:30 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mysql.com> | 2010-03-04 16:02:30 +0400 |
commit | 79cecfb55e88ef92fc854559a1491f5d3ef38f57 (patch) | |
tree | 169ae072d87a08012ff7bba42bea4074261cbcfa /strings | |
parent | 19bda05a3c75c1f41b24506d02b3cdb05d8cc071 (diff) | |
download | mariadb-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.c | 15 |
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)) |