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;
 }