striplt(buf);
if (!strncasecmp(buf, "charset=", 8)) {
strcpy(charset, &buf[8]);
+
+ /*
+ * The brain-damaged webmail program in Microsoft Exchange declares
+ * a charset of "unicode" when they really mean "UTF-8". GNU iconv
+ * treats "unicode" as an alias for "UTF-16" so we have to manually
+ * fix this here, otherwise messages generated in Exchange webmail
+ * show up as a big pile of weird characters.
+ */
+ if (!strcasecmp(charset, "unicode")) {
+ strcpy(charset, "UTF-8");
+ }
+
}
}
converted_alloc = content_length + 8192;
converted_msg = malloc(converted_alloc);
if (converted_msg == NULL) {
- abort(); /* FIXME */
+ wprintf("Error %d: %s<br />%s:%s", errno, strerror(errno), __FILE__, __LINE__);
+ goto BAIL;
}
+
strcpy(converted_msg, "");
ptr = msg;
msgend = strchr(msg, 0);
}
}
else {
- /**
- * We need to know when we're inside a tag,
- * so we don't turn things that look like URL's into
- * links, when they're already links - or image sources.
- */
- if (*ptr == '<') ++brak;
- if (*ptr == '>') --brak;
- if (!strncasecmp(ptr, "</A>", 3)) --alevel;
converted_msg[output_length] = *ptr++;
converted_msg[++output_length] = 0;
}
+ /**
+ * We need to know when we're inside a tag,
+ * so we don't turn things that look like URL's into
+ * links, when they're already links - or image sources.
+ */
+ if (*ptr == '<') ++brak;
+ if (*ptr == '>') --brak;
+ if (!strncasecmp(ptr, "</A>", 3)) --alevel;
}
/** uncomment these two lines to override conversion */
/** Output our big pile of markup */
client_write(converted_msg, output_length);
- /** A little trailing vertical whitespace... */
+BAIL: /** A little trailing vertical whitespace... */
wprintf("<br /><br />\n");
/** Now give back the memory */