diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-07-31 15:57:11 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-07-31 15:57:11 +0300 |
commit | 110e3bd7a6e63e0c5c734d97a0a44ed5c1b6de7c (patch) | |
tree | 7503f72520e42d2be544af8729576317f22806ea | |
parent | c1b569d9d61f129d2eefd1e87e6ea6cd96810788 (diff) | |
download | tar-110e3bd7a6e63e0c5c734d97a0a44ed5c1b6de7c.tar.gz tar-110e3bd7a6e63e0c5c734d97a0a44ed5c1b6de7c.tar.bz2 |
Fix double-free introduced by 577dc345
* src/utf8.c (utf8_convert): Don't store freed value in *output
-rw-r--r-- | src/utf8.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -65,7 +65,7 @@ bool utf8_convert (bool to_utf, char const *input, char **output) { char ICONV_CONST *ib; - char *ob; + char *ob, *ret; size_t inlen; size_t outlen; iconv_t cd = utf8_init (to_utf); @@ -80,14 +80,15 @@ utf8_convert (bool to_utf, char const *input, char **output) inlen = strlen (input) + 1; outlen = inlen * MB_LEN_MAX + 1; - ob = *output = xmalloc (outlen); + ob = ret = xmalloc (outlen); ib = (char ICONV_CONST *) input; if (iconv (cd, &ib, &inlen, &ob, &outlen) == -1) { - free (*output); + free (ret); return false; } *ob = 0; + *output = ret; return true; } |