From cd510df51d33096fbaf83b51b1aac5fb2e3cabb6 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Tue, 12 Jul 2016 14:08:31 +0200 Subject: rfc2047: handle uint properly --- rfc2047.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'rfc2047.c') diff --git a/rfc2047.c b/rfc2047.c index 7aa824b..436aef0 100644 --- a/rfc2047.c +++ b/rfc2047.c @@ -115,14 +115,21 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) t = b; while (t < s) // strip space-only inbetween encoded words if (!isspace((unsigned char) *t++)) { - while (b < s && dlen--) + while (b < s && dlen) { *dst++ = *b++; + dlen--; + } break; } + if (!dlen) + break; + s += 2; char *e = strchr(s, '?'); + if (!e) + goto nocode; *e = 0; ic = iconv_open(tgtenc, s); @@ -162,11 +169,13 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) iconv_close(ic); - while (declen-- && dlen--) + while (declen-- && dlen) { *dst++ = *dec++; + dlen--; + } b = stop + 2; - } while (s = strstr(b, "=?")); + } while (dlen && (s = strstr(b, "=?"))); while (*b && dlen-- > 0) *dst++ = *b++; @@ -178,8 +187,10 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) nocode: fprintf(stderr, "error decoding rfc2047\n"); nocodeok: - while (*src && dlen--) + while (*src && dlen) { *dst++ = *src++; + dlen--; + } *dst = 0; return 1; -- cgit 1.4.1