* (mh_strcasecmp): Rename the private strcasecmp function to mh_strcasecmp.
[mmh] / sbr / fmt_rfc2047.c
index 9f5b26d..ef1bdfa 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <h/mh.h>
+#include <h/utils.h>
 #ifdef HAVE_ICONV
 #  include <iconv.h>
 #  include <errno.h>
@@ -134,7 +135,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen)
                /* .. it can't. We'll use iconv then. */
                *pp = '\0';
                cd = iconv_open(get_charset(), startofmime);
-               fromutf8 = !strcasecmp(startofmime, "UTF-8");
+               fromutf8 = !mh_strcasecmp(startofmime, "UTF-8");
                *pp = '?';
                 if (cd == (iconv_t)-1) continue;
                use_iconv = 1;
@@ -195,11 +196,19 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen)
            }
 
 #ifdef HAVE_ICONV
+           /*
+            * empty encoded text. This ensures that we don't
+            * malloc 0 bytes but skip on to the end
+            */
+           if (endofmime == startofmime) {
+               use_iconv = 0;
+               iconv_close(cd);
+            }
+
            if (use_iconv) {
                saveq = q;
                savedstlen = dstlen;
-               if (!(q = convbuf = (char *)malloc(endofmime - startofmime)))
-                   continue;
+                q = convbuf = (char *) mh_xmalloc(endofmime - startofmime);
             }
 /* ADDCHR2 is for adding characters when q is or might be convbuf:
  * in this case on buffer-full we want to run iconv before returning.