summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authorgshchepa/uchum@host.loc <>2008-04-23 11:06:26 +0500
committergshchepa/uchum@host.loc <>2008-04-23 11:06:26 +0500
commitcdd0428ac885761af23f9ee5ae0ebfd2dae8726b (patch)
treea2ecc8aded425fd30407dc717fe1b6a7e4ffa81b /strings
parent45c8043596d1c9b416cc5c65e2f5cac10f5e27f1 (diff)
parent686d657803b10bd8041bb98dabb4f0d316de8688 (diff)
downloadmariadb-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.c6
-rw-r--r--strings/ctype-gbk.c6
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