diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-13 17:17:43 +0200 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2016-07-13 17:17:43 +0200 |
commit | 6e6d1993a2cd61d49c6207986798e8324a9a3e2a (patch) | |
tree | 1beb5adf49c74c3eb8c16ff2d8c030691190df72 /rfc2047.c | |
parent | 00954008cca242f88f3af743f9ff731d3c384ae8 (diff) | |
download | mblaze-6e6d1993a2cd61d49c6207986798e8324a9a3e2a.tar.gz mblaze-6e6d1993a2cd61d49c6207986798e8324a9a3e2a.tar.xz mblaze-6e6d1993a2cd61d49c6207986798e8324a9a3e2a.zip |
rfc2047: free all things in blaze822_decode_rfc2047
Diffstat (limited to 'rfc2047.c')
-rw-r--r-- | rfc2047.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/rfc2047.c b/rfc2047.c index a52c612..94b9a59 100644 --- a/rfc2047.c +++ b/rfc2047.c @@ -103,7 +103,7 @@ blaze822_decode_b64(char *s, char *e, char **deco, size_t *decleno) int blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) { - iconv_t ic; + iconv_t ic = (iconv_t)-1; char *b = src; @@ -149,7 +149,7 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) if (!stop) goto nocode; - char *dec; + char *dec, *decchunk; size_t declen; if (enc == 'q') blaze822_decode_qp(start, stop, &dec, &declen); @@ -158,6 +158,7 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) else goto nocode; + decchunk = dec; int r = iconv(ic, &dec, &declen, &dst, &dlen); if (r < 0) { if (errno == E2BIG) { @@ -179,6 +180,8 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) dlen--; } + free(decchunk); + b = stop + 2; } while (dlen && (s = strstr(b, "=?"))); @@ -192,6 +195,9 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) return 1; nocode: + if (ic != (iconv_t)-1) + iconv_close(ic); + fprintf(stderr, "error decoding rfc2047\n"); nocodeok: while (*src && dlen) { |