diff options
author | gshchepa/uchum@host.loc <> | 2008-04-23 11:06:26 +0500 |
---|---|---|
committer | gshchepa/uchum@host.loc <> | 2008-04-23 11:06:26 +0500 |
commit | cdd0428ac885761af23f9ee5ae0ebfd2dae8726b (patch) | |
tree | a2ecc8aded425fd30407dc717fe1b6a7e4ffa81b /strings | |
parent | 45c8043596d1c9b416cc5c65e2f5cac10f5e27f1 (diff) | |
parent | 686d657803b10bd8041bb98dabb4f0d316de8688 (diff) | |
download | mariadb-git-cdd0428ac885761af23f9ee5ae0ebfd2dae8726b.tar.gz |
Merge host.loc:/home/uchum/work/5.0-bugteam
into host.loc:/home/uchum/work/5.1-bugteam
Diffstat (limited to 'strings')
-rw-r--r-- | strings/ctype-big5.c | 6 | ||||
-rw-r--r-- | strings/ctype-gbk.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index ecfd3d648e0..3da307b82fc 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -307,15 +307,17 @@ static size_t my_strnxfrm_big5(CHARSET_INFO *cs __attribute__((unused)), { uint16 e; size_t dstlen= len; + uchar *dest_end= dest + dstlen; len = srclen; - while (len--) + while (len-- && dest < dest_end) { if ((len > 0) && isbig5code(*src, *(src+1))) { e = big5strokexfrm((uint16) big5code(*src, *(src+1))); *dest++ = big5head(e); - *dest++ = big5tail(e); + if (dest < dest_end) + *dest++ = big5tail(e); src +=2; len--; } else diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index c7a2558eb37..7b8bb85652b 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -2668,15 +2668,17 @@ static size_t my_strnxfrm_gbk(CHARSET_INFO *cs __attribute__((unused)), { uint16 e; size_t dstlen= len; + uchar *dest_end= dest + dstlen; len = srclen; - while (len--) + while (len-- && dest < dest_end) { if ((len > 0) && isgbkcode(*src, *(src+1))) { e = gbksortorder((uint16) gbkcode(*src, *(src+1))); *dest++ = gbkhead(e); - *dest++ = gbktail(e); + if (dest < dest_end) + *dest++ = gbktail(e); src+=2; len--; } else |