as pointed out by exg on #mutt.
+2008-04-29 10:44 -0700 David Champion <dgc@uchicago.edu> (1de934f1d618)
+
+ * muttlib.c: [9414b9dd36db] broke softfill. (closes #3035)
+
+2008-04-29 10:38 -0700 Wilfried Goesgens <dothebart@uncensored.citadel.org> (8017c8074f62)
+
+ * ChangeLog, imap/auth_gss.c: Print GSSAPI status messages to debug
+ log on error.
+
2008-04-03 17:08 +0200 Miroslav Lichvar <mlichvar@redhat.com> (bdd44e92919d)
* mutt_ssl_gnutls.c: Fix sending long commands when using gnutls.
static size_t wcrtomb_iconv (char *s, wchar_t wc, iconv_t cd)
{
- char buf[MB_LEN_MAX];
+ char buf[MB_LEN_MAX+1];
ICONV_CONST char *ib;
char *ob;
size_t ibl, obl, r;
if (s)
{
- ibl = mutt_wctoutf8 (buf, wc);
+ ibl = mutt_wctoutf8 (buf, wc, sizeof (buf));
if (ibl == (size_t)(-1))
return (size_t)(-1);
ib = buf;
/* We only handle stateless encodings, so we can ignore ps. */
if (Charset_is_utf8)
- return mutt_wctoutf8 (s, wc);
+ return mutt_wctoutf8 (s, wc, MB_LEN_MAX);
else if (charset_from_utf8 != (iconv_t)(-1))
return wcrtomb_iconv (s, wc, charset_from_utf8);
else
int mutt_from_base64 (char*, const char*);
/* utf8.c */
-int mutt_wctoutf8 (char *s, unsigned int c);
+int mutt_wctoutf8 (char *s, unsigned int c, size_t buflen);
#ifdef LOCALES_HACK
#define IsPrint(c) (isprint((unsigned char)(c)) || \
#ifndef HAVE_WC_FUNCS
+#include <sys/types.h>
#include <errno.h>
#ifndef EILSEQ
#define EILSEQ EINVAL
#endif
-int mutt_wctoutf8 (char *s, unsigned int c)
+int mutt_wctoutf8 (char *s, unsigned int c, size_t buflen)
{
if (c < (1 << 7))
{
- if (s)
+ if (s && buflen >= 1)
*s++ = c;
return 1;
}
else if (c < (1 << 11))
{
- if (s)
- {
+ if (s && buflen >= 2)
+ {
*s++ = 0xc0 | (c >> 6);
*s++ = 0x80 | (c & 0x3f);
}
}
else if (c < (1 << 16))
{
- if (s)
+ if (s && buflen >= 3)
{
*s++ = 0xe0 | (c >> 12);
*s++ = 0x80 | ((c >> 6) & 0x3f);
}
else if (c < (1 << 21))
{
- if (s)
+ if (s && buflen >= 4)
{
*s++ = 0xf0 | (c >> 18);
*s++ = 0x80 | ((c >> 12) & 0x3f);
}
else if (c < (1 << 26))
{
- if (s)
+ if (s && buflen >= 5)
{
*s++ = 0xf8 | (c >> 24);
*s++ = 0x80 | ((c >> 18) & 0x3f);
}
else if (c < (1 << 31))
{
- if (s)
+ if (s && buflen >= 6)
{
*s++ = 0xfc | (c >> 30);
*s++ = 0x80 | ((c >> 24) & 0x3f);