]> git.ipfire.org Git - thirdparty/tar.git/commitdiff
Avoid some resource leaks
authorPavel Raiskup <praiskup@redhat.com>
Tue, 31 Jul 2018 09:06:09 +0000 (12:06 +0300)
committerSergey Poznyakoff <gray@gnu.org>
Tue, 31 Jul 2018 09:06:09 +0000 (12:06 +0300)
* src/incremen.c (store_rename): Free temp_name, leaked before for
each renamed directory with --listed-incremental.
* src/transform.c (add_literal_segment): Tighten arguments by
const.
(parse_transform_expr): Free 'str', leaked storage for each
--transform option before.
* src/utf8.c (utf8_convert): Deallocate buffer for failed iconv()
call so callers don't have to.

src/incremen.c
src/transform.c
src/utf8.c

index ca611f65064bfd85629d511522284e1c52758149..7c26eb80c144741761954136d7378193ebc8f2e6 100644 (file)
@@ -915,6 +915,7 @@ store_rename (struct directory *dir, struct obstack *stk)
            obstack_code_rename (stk, p->orig->name, p->name);
 
          obstack_code_rename (stk, "", prev->name);
+         free (temp_name);
        }
     }
 }
index 3fae3c0d1a1cdd2e7d61ed8ef56c977c09e5192f..6ef0da6db7a829b68038db27e32c75985994d673 100644 (file)
@@ -101,7 +101,7 @@ add_segment (struct transform *tf)
 }
 
 static void
-add_literal_segment (struct transform *tf, char *str, char *end)
+add_literal_segment (struct transform *tf, const char *str, const char *end)
 {
   size_t len = end - str;
   if (len)
@@ -403,6 +403,7 @@ parse_transform_expr (const char *expr)
        cur++;
     }
   add_literal_segment (tf, beg, cur);
+  free(str);
 
   return p;
 }
index a018ce0a9169b0868bada7ce0efd711e7cb5c26f..168d636c210d97e12b8f3fda6f5f2c43d95b700f 100644 (file)
@@ -68,7 +68,6 @@ utf8_convert (bool to_utf, char const *input, char **output)
   char *ob;
   size_t inlen;
   size_t outlen;
-  size_t rc;
   iconv_t cd = utf8_init (to_utf);
 
   if (cd == 0)
@@ -83,9 +82,13 @@ utf8_convert (bool to_utf, char const *input, char **output)
   outlen = inlen * MB_LEN_MAX + 1;
   ob = *output = xmalloc (outlen);
   ib = (char ICONV_CONST *) input;
-  rc = iconv (cd, &ib, &inlen, &ob, &outlen);
+  if (iconv (cd, &ib, &inlen, &ob, &outlen) == -1)
+    {
+      free (*output);
+      return false;
+    }
   *ob = 0;
-  return rc != -1;
+  return true;
 }
 \f