]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Plug memory leaks which Clang Static Analyser pointed out.
authorMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 6 Jul 2014 03:06:15 +0000 (12:06 +0900)
committerMichihiro NAKAJIMA <ggcueroad@gmail.com>
Sun, 6 Jul 2014 03:40:04 +0000 (12:40 +0900)
libarchive/archive_read_support_format_xar.c
libarchive/archive_util.c
libarchive/archive_write_disk_posix.c

index ba1be8d2f5b8ddb31b0c11a0f50c67251d27673a..f0e240c1644e653e3587544e40428a89f770f6e1 100644 (file)
@@ -3192,9 +3192,8 @@ xml2_read_toc(struct archive_read *a)
                case XML_READER_TYPE_ELEMENT:
                        empty = xmlTextReaderIsEmptyElement(reader);
                        r = xml2_xmlattr_setup(a, &list, reader);
-                       if (r != ARCHIVE_OK)
-                               return (r);
-                       r = xml_start(a, name, &list);
+                       if (r == ARCHIVE_OK)
+                               r = xml_start(a, name, &list);
                        xmlattr_cleanup(&list);
                        if (r != ARCHIVE_OK)
                                return (r);
index 3d92566b2c09e9483d2409576dba68c00f7fe3f2..a6a485c65d0d4ca6a31e6fe466fa51b316c1828a 100644 (file)
@@ -566,8 +566,11 @@ archive_utility_string_sort_helper(char **strings, unsigned int n)
     {
       lesser_count++;
       tmp = (char **)realloc(lesser, lesser_count * sizeof(char *));
-      if (!tmp)
+      if (!tmp) {
+        free(greater);
+        free(lesser);
         return (ARCHIVE_FATAL);
+      }
       lesser = tmp;
       lesser[lesser_count - 1] = strings[i];
     }
@@ -575,8 +578,11 @@ archive_utility_string_sort_helper(char **strings, unsigned int n)
     {
       greater_count++;
       tmp = (char **)realloc(greater, greater_count * sizeof(char *));
-      if (!tmp)
+      if (!tmp) {
+        free(greater);
+        free(lesser);
         return (ARCHIVE_FATAL);
+      }
       greater = tmp;
       greater[greater_count - 1] = strings[i];
     }
index 87f4f0e56a65f725a24d24b978fdcecce7708166..ab3bdace383497d85e5f6aeee1402a53c6343e10 100644 (file)
@@ -3384,6 +3384,7 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd)
        }
        for (xattr_i = 0; xattr_i < xattr_size;
            xattr_i += strlen(xattr_names + xattr_i) + 1) {
+               char *xattr_val_saved;
                ssize_t s;
                int f;
 
@@ -3394,11 +3395,13 @@ copy_xattrs(struct archive_write_disk *a, int tmpfd, int dffd)
                        ret = ARCHIVE_WARN;
                        goto exit_xattr;
                }
+               xattr_val_saved = xattr_val;
                xattr_val = realloc(xattr_val, s);
                if (xattr_val == NULL) {
                        archive_set_error(&a->archive, ENOMEM,
                            "Failed to get metadata(xattr)");
                        ret = ARCHIVE_WARN;
+                       free(xattr_val_saved);
                        goto exit_xattr;
                }
                s = fgetxattr(tmpfd, xattr_names + xattr_i, xattr_val, s, 0, 0);