Mercurial > hg
changeset 326:1bc374915787
Fix crash when utf8_decode parameter is NULL
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sun, 17 Jul 2005 15:35:09 +0100 |
parents | ff6fb51bfd78 |
children | 53dfe6aa6a23 |
files | mcabber/src/utf8.c |
diffstat | 1 files changed, 18 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/src/utf8.c Sat Jul 16 13:27:00 2005 +0100 +++ b/mcabber/src/utf8.c Sun Jul 17 15:35:09 2005 +0100 @@ -13,21 +13,24 @@ */ char *utf8_decode(const char *src) { - char *ret = calloc(1, strlen(src) + 1); - unsigned char *aux = (unsigned char*)ret; + unsigned char *ret; + + if (!src) return NULL; + + ret = calloc(1, strlen(src) + 1); while (*src) { unsigned char lead = *src++; if ((lead & 0xe0) == 0xc0) { unsigned char ch2 = *src++; - *aux = ((lead & 0x1f) << 6) | (ch2 & 0x3f); + *ret = ((lead & 0x1f) << 6) | (ch2 & 0x3f); } else { - *aux = lead; + *ret = lead; } - aux++; + ret++; } - return ret; + return (char*)ret; } @@ -40,18 +43,21 @@ */ char *utf8_encode(const char *src) { - char *ret = calloc(1, (strlen(src) * 2) + 1); - unsigned char *aux = (unsigned char*)ret; + unsigned char *ret; + + if (!src) return NULL; + + ret = calloc(1, (strlen(src) * 2) + 1); while (*src) { unsigned char ch = *src++; if (ch < 0x80U) { - *aux++ = ch; + *ret++ = ch; } else { /* if (ch < 0x800U) { */ - *aux++ = 0xc0 | (ch >> 6); - *aux++ = 0x80 | (ch & 0x3f); + *ret++ = 0xc0 | (ch >> 6); + *ret++ = 0x80 | (ch & 0x3f); } } - return ret; + return (char*)ret; }