rfc2047: free all things in blaze822_decode_rfc2047

pull/1/merge
Christian Neukirchen 8 years ago
parent 00954008cc
commit 6e6d1993a2

@ -103,7 +103,7 @@ blaze822_decode_b64(char *s, char *e, char **deco, size_t *decleno)
int int
blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
{ {
iconv_t ic; iconv_t ic = (iconv_t)-1;
char *b = src; char *b = src;
@ -149,7 +149,7 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
if (!stop) if (!stop)
goto nocode; goto nocode;
char *dec; char *dec, *decchunk;
size_t declen; size_t declen;
if (enc == 'q') if (enc == 'q')
blaze822_decode_qp(start, stop, &dec, &declen); blaze822_decode_qp(start, stop, &dec, &declen);
@ -158,6 +158,7 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
else else
goto nocode; goto nocode;
decchunk = dec;
int r = iconv(ic, &dec, &declen, &dst, &dlen); int r = iconv(ic, &dec, &declen, &dst, &dlen);
if (r < 0) { if (r < 0) {
if (errno == E2BIG) { if (errno == E2BIG) {
@ -179,6 +180,8 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
dlen--; dlen--;
} }
free(decchunk);
b = stop + 2; b = stop + 2;
} while (dlen && (s = strstr(b, "=?"))); } while (dlen && (s = strstr(b, "=?")));
@ -192,6 +195,9 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc)
return 1; return 1;
nocode: nocode:
if (ic != (iconv_t)-1)
iconv_close(ic);
fprintf(stderr, "error decoding rfc2047\n"); fprintf(stderr, "error decoding rfc2047\n");
nocodeok: nocodeok:
while (*src && dlen) { while (*src && dlen) {

Loading…
Cancel
Save