]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Update MSDOS file attribute test
authorTim Kientzle <kientzle@acm.org>
Mon, 14 Mar 2016 03:10:24 +0000 (20:10 -0700)
committerTim Kientzle <kientzle@acm.org>
Mon, 14 Mar 2016 03:10:24 +0000 (20:10 -0700)
libarchive/test/test_read_format_zip_msdos.c
libarchive/test/test_read_format_zip_msdos.zip.uu

index 66da77c2201dd35bb609fcdfbea43e1f4f58886f..fe287e1ac3845e80c4fcc1e9fdf1efe298bd4e66 100644 (file)
@@ -30,6 +30,8 @@ DEFINE_TEST(test_read_format_zip_msdos)
        const char *refname = "test_read_format_zip_msdos.zip";
        struct archive *a;
        struct archive_entry *ae;
+       char *p;
+       size_t s;
 
        extract_reference_file(refname);
 
@@ -39,8 +41,10 @@ DEFINE_TEST(test_read_format_zip_msdos)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 17));
 
+       /* 'ab' is marked as a directory in the central dir 
+        * with MSDOS attribute info  */
        assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-       assertEqualString("a/", archive_entry_pathname(ae));
+       assertEqualString("ab/", archive_entry_pathname(ae));
        assertEqualInt(AE_IFDIR | 0775, archive_entry_mode(ae));
 
        assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
@@ -52,12 +56,28 @@ DEFINE_TEST(test_read_format_zip_msdos)
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
        
        /* Verify with streaming reader. */
-#if 0
        p = slurpfile(&s, refname);
        assert((a = archive_read_new()) != NULL);
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
        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);
-#endif
+
+       /*
+        * 'ab' is not marked as a directory in the local file header
+        * (local file headers lack external attribute info), so the
+        * streaming reader can only determine if something is a directory
+        * by whether the name ends in '/'.
+        */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ab", archive_entry_pathname(ae));
+       assertEqualInt(AE_IFREG | 0664, archive_entry_mode(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("a/gru\xCC\x88n.png", archive_entry_pathname(ae));
+       assertEqualInt(AE_IFREG | 0664, archive_entry_mode(ae));
+
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+       free(p);
 }
index 6e9fd9a61739db08ec6771721b03b301f4841564..1691ca97b9cc1084d32ae842820369343acaca2a 100644 (file)
@@ -1,7 +1,7 @@
 begin 644 test_read_format_zip_msdos.zip
-M4$L#!!0``````&9A3D,````````````````"````82]02P,$"@``````M)QO
+M4$L#!!0``````&9A3D,````````````````"````86)02P,$"@``````M)QO
 M/-&'5C4&````!@````P```!A+V=R=<R(;BYP;F=03D=%3D102P$"/P`4````
-M``!F84Y#`````````````````@`D`````````!``````````82\*`"``````
+M``!F84Y#`````````````````@`D`````````!``````````86(*`"``````
 M``$`&`"N2J&TQ<C.`:Y*H;3%R,X!C?R@M,7(S@%02P$"/P`*``````"TG&\\
 MT8=6-08````&````#````````````(`````@````82]G<G7,B&XN<&YG4$L%
 3!@`````"``(`C@```%``````````