# HG changeset patch # User Mikael Berthe # Date 1121610909 -3600 # Node ID 1bc374915787764081fcb05fc846d05dcfe8fad9 # Parent ff6fb51bfd78c240c79d875291561499c562ab53 Fix crash when utf8_decode parameter is NULL diff -r ff6fb51bfd78 -r 1bc374915787 mcabber/src/utf8.c --- 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; }