]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Repair detected memory leaks in libarchive tests
authorMartin Matuska <martin@matuska.org>
Wed, 1 Feb 2017 00:44:43 +0000 (01:44 +0100)
committerMartin Matuska <martin@matuska.org>
Wed, 1 Feb 2017 01:56:13 +0000 (02:56 +0100)
Fix test_callbacks() in test_read_disk_directory_traversals

14 files changed:
libarchive/test/test_archive_string.c
libarchive/test/test_compat_gtar.c
libarchive/test/test_read_disk_directory_traversals.c
libarchive/test/test_read_format_zip.c
libarchive/test/test_read_format_zip_comment_stored.c
libarchive/test/test_read_format_zip_mac_metadata.c
libarchive/test/test_read_format_zip_malformed.c
libarchive/test/test_read_format_zip_nested.c
libarchive/test/test_read_format_zip_padded.c
libarchive/test/test_read_format_zip_sfx.c
libarchive/test/test_write_disk_secure746.c
libarchive/test/test_write_filter_lz4.c
libarchive/test/test_write_format_zip_large.c
libarchive/test/test_write_format_zip_zip64.c

index 9e3f90702dbca713556cfae71d5aff1b11056006..7fa743ba9ed2a07fc38f9d135187c9d42d7f5908 100644 (file)
@@ -67,6 +67,8 @@ test_archive_string_ensure(void)
 
        assert(&s == archive_string_ensure(&s, EXTENT + 1));
        assertNonNULLString(0, 2 * EXTENT, s);
+
+       archive_string_free(&s);
 }
 
 static void
@@ -92,6 +94,8 @@ test_archive_strcat(void)
        /* non-empty target, non-empty source */
        assert(&s == archive_strcat(&s, "baz"));
        assertExactString(8, EXTENT, "fubarbaz", s);
+
+       archive_string_free(&s);
 }
 
 static void
@@ -109,6 +113,8 @@ test_archive_strappend_char(void)
        /* non-empty target */
        archive_strappend_char(&s, 'Y');
        assertExactString(2, EXTENT, "XY", s);
+
+       archive_string_free(&s);
 }
 
 /* archive_strnXXX() tests focus on length handling.
@@ -134,6 +140,8 @@ test_archive_strncat(void)
        /* long read is ok too! */
        assert(&s == archive_strncat(&s, "snafu", 8));
        assertExactString(13, EXTENT, "snafubarsnafu", s);
+
+       archive_string_free(&s);
 }
 
 static void
@@ -155,6 +163,8 @@ test_archive_strncpy(void)
        /* long read is ok too! */
        assert(&s == archive_strncpy(&s, "snafu", 8));
        assertExactString(5, EXTENT, "snafu", s);
+
+       archive_string_free(&s);
 }
 
 static void
@@ -176,6 +186,8 @@ test_archive_strcpy(void)
        /* dirty target, empty source */
        assert(&s == archive_strcpy(&s, ""));
        assertExactString(0, EXTENT, "", s);
+
+       archive_string_free(&s);
 }
 
 static void
@@ -222,6 +234,11 @@ test_archive_string_concat(void)
        archive_string_concat(&t, &s);
        assertExactString(5, EXTENT, "snafu", s);
        assertExactString(5, EXTENT, "snafu", t);
+
+       archive_string_free(&v);
+       archive_string_free(&u);
+       archive_string_free(&t);
+       archive_string_free(&s);
 }
 
 static void
@@ -274,6 +291,11 @@ test_archive_string_copy(void)
        archive_string_copy(&t, &s);
        assertExactString(5, EXTENT, "fubar", s);
        assertExactString(5, EXTENT, "fubar", t);
+
+       archive_string_free(&v);
+       archive_string_free(&u);
+       archive_string_free(&t);
+       archive_string_free(&s);
 }
 
 static void
@@ -328,6 +350,8 @@ test_archive_string_sprintf(void)
        archive_string_empty(&s);
        archive_string_sprintf(&s, "%d", 1234567890);
        assertExactString(10, 8 * EXTENT, "1234567890", s);
+
+       archive_string_free(&s);
 }
 
 DEFINE_TEST(test_archive_string)
index def24aae52200ca20a0a41db52bab716993b34ce..70669244efb93c44ec1e78ffa0c8ab9647bcfd05 100644 (file)
@@ -142,6 +142,8 @@ test_compat_gtar_2(void)
        assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE);
        assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_GNUTAR);
 
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
 DEFINE_TEST(test_compat_gtar)
index 31eb76b93123cb2b37592b325978ddc773e3e07c..c9aca8fa985d0601b065a0911a0258df1f507ece 100644 (file)
@@ -1320,11 +1320,13 @@ test_callbacks(void)
        assertUtimes("cb", 886622, 0, 886622, 0);
 
        assert((ae = archive_entry_new()) != NULL);
-       if (assert((a = archive_read_disk_new()) != NULL)) {
+       assert((a = archive_read_disk_new()) != NULL);
+       if (a == NULL) {
                archive_entry_free(ae);
                return;
        }
-       if (assert((m = archive_match_new()) != NULL)) {
+       assert((m = archive_match_new()) != NULL);
+       if (m == NULL) {
                archive_entry_free(ae);
                archive_read_free(a);
                archive_match_free(m);
@@ -1377,6 +1379,10 @@ test_callbacks(void)
        /* Close the disk object. */
        assertEqualInt(ARCHIVE_OK, archive_read_close(a));
 
+       /* Reset name filter */
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_read_disk_set_matching(a, NULL, NULL, NULL));
+
        /*
         * Test2: Traversals with a metadata filter.
         */
@@ -1394,7 +1400,7 @@ test_callbacks(void)
        while (file_count--) {
                archive_entry_clear(ae);
                assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
-               failure("File 'cb/f1' should be exclueded");
+               failure("File 'cb/f1' should be excluded");
                assert(strcmp(archive_entry_pathname(ae), "cb/f1") != 0);
                if (strcmp(archive_entry_pathname(ae), "cb") == 0) {
                        assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
index da5b13787ed5780200761b602dc2f8aad69e938d..cea2676f3ea68362c26193e88a5f231955320a47 100644 (file)
@@ -126,6 +126,7 @@ test_basic(void)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
        assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 31));
        verify_basic(a, 0);
+       free(p);
 }
 
 /*
@@ -195,6 +196,7 @@ test_info_zip_ux(void)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
        assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 108));
        verify_info_zip_ux(a, 0);
+       free(p);
 }
 
 /*
@@ -258,6 +260,7 @@ test_extract_length_at_end(void)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
        assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 108));
        verify_extract_length_at_end(a, 0);
+       free(p);
 }
 
 static void
@@ -294,6 +297,8 @@ test_symlink(void)
        assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+       free(p);
 }
 
 DEFINE_TEST(test_read_format_zip)
index d2b935de2d44f745793cf6ebfb44a7d408aac883..b92b2886cddaf8cd17f571c1024e6b531434d6aa 100644 (file)
@@ -63,6 +63,8 @@ verify(const char *refname)
        assertEqualInt(archive_entry_is_encrypted(ae), 0);
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+       free(p);
 }
 
 DEFINE_TEST(test_read_format_zip_comment_stored)
index 97aa427b0348201d293a9b828708965a4d2e30b2..99b7012328cbfbabc7c9d3c1e3b36bbbd8167152 100644 (file)
@@ -112,4 +112,6 @@ DEFINE_TEST(test_read_format_zip_mac_metadata)
        assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+       free(p);
 }
index 2327d9149029029cc4b86a62f82e73ae9f2b0222..e14a3f5660daf0e82d6114e52f193d829db333bd 100644 (file)
@@ -53,6 +53,7 @@ test_malformed1(void)
        assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 31));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+       free(p);
 }
 
 DEFINE_TEST(test_read_format_zip_malformed)
index 6830afb716d7ac6d9df2c7fe02a811d18a049cbf..5f6edf2674430e1b616e64169019f89b81f571d4 100644 (file)
@@ -65,6 +65,8 @@ DEFINE_TEST(test_read_format_zip_nested)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
 
+       free(p);
+
        /* Inspect inner Zip. */
        assert((a = archive_read_new()) != NULL);
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
index dae88abba53e5a3df0c54d6d419ddbccf4ed78fc..2094eca3557ae24bc9c08efcf546fd354d72dcaf 100644 (file)
@@ -53,6 +53,8 @@ verify_padded_archive(const char *refname)
        assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+       free(p);
 }
 
 /*
index d5992d39565806e6dda998441d4099d9042eb053..dc76ef9b38266f44c77fc7337589659c6125b5ba 100644 (file)
@@ -60,4 +60,6 @@ DEFINE_TEST(test_read_format_zip_sfx)
        assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+       free(p);
 }
index 460aafef12c5eb901ce7d752f02b567eb191ab9b..5ce1fd9c4c434122885ad13deaa016b26ed27fa7 100644 (file)
@@ -72,6 +72,9 @@ DEFINE_TEST(test_write_disk_secure746a)
 
        /* Verify that target file contents are unchanged. */
        assertTextFileContents("unmodified", "../target/foo");
+
+       assertEqualIntA(a, ARCHIVE_FATAL, archive_write_close(a));
+       archive_write_free(a);
 #endif
 }
 
index a043698417096d3fdba6d657505dceb524137f81..4f2135a3150717cddcad3e44e12146e7e284cf9b 100644 (file)
@@ -56,6 +56,7 @@ DEFINE_TEST(test_write_filter_lz4)
        } else {
                assertEqualInt(ARCHIVE_OK, r);
        }
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
 
        buffsize = 2000000;
        assert(NULL != (buff = (char *)malloc(buffsize)));
@@ -299,6 +300,7 @@ test_options(const char *options)
        } else {
                assertEqualInt(ARCHIVE_OK, r);
        }
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
 
        buffsize = 2000000;
        assert(NULL != (buff = (char *)malloc(buffsize)));
index d73dd62dee198593793957b37df7db36f04777ae..88788b56d50dc736c5488bf9ad8e106643acbf23 100644 (file)
@@ -470,5 +470,6 @@ DEFINE_TEST(test_write_format_zip_large)
        assertEqualMem(cd_start, "PK\001\002", 4);
 
        fileblocks_free(fileblocks);
+       free(buff);
        free(nulldata);
 }
index b83aeab5316aeab2a032fa9a0f644e1c44d17816..c5f00a2e5d8dce1e65e88cd81484c8ff7c44f6aa 100644 (file)
@@ -49,6 +49,8 @@ verify_zip_filesize(uint64_t size, int expected)
        archive_entry_set_size(ae, size);
        assertEqualInt(expected, archive_write_header(a, ae));
 
+       archive_entry_free(ae);
+
        /* Don't actually write 4GB! ;-) */
        assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
 }