]> git.ipfire.org Git - thirdparty/tar.git/commitdiff
Fix double-free introduced by 577dc345
authorSergey Poznyakoff <gray@gnu.org>
Tue, 31 Jul 2018 12:57:11 +0000 (15:57 +0300)
committerSergey Poznyakoff <gray@gnu.org>
Tue, 31 Jul 2018 12:57:11 +0000 (15:57 +0300)
* src/utf8.c (utf8_convert): Don't store freed value in *output

src/utf8.c

index 168d636c210d97e12b8f3fda6f5f2c43d95b700f..abf26bc2f23d3a121de7e907df9dee4ad9135a50 100644 (file)
@@ -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;
 }
 \f