summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@acm.org>2016-03-13 20:10:24 -0700
committerTim Kientzle <kientzle@acm.org>2016-03-13 20:10:24 -0700
commitdf2b46bf40d073bc9547c4c96f486a1fa05bd4cc (patch)
tree8c6137e137ddf8617e9634bbe2cae12a0f472ab4
parent3933e100461d2251305b2fc0db10c6adb4c762e4 (diff)
downloadlibarchive-df2b46bf40d073bc9547c4c96f486a1fa05bd4cc.tar.gz
Update MSDOS file attribute test
-rw-r--r--libarchive/test/test_read_format_zip_msdos.c28
-rw-r--r--libarchive/test/test_read_format_zip_msdos.zip.uu4
2 files changed, 26 insertions, 6 deletions
diff --git a/libarchive/test/test_read_format_zip_msdos.c b/libarchive/test/test_read_format_zip_msdos.c
index 66da77c2..fe287e1a 100644
--- a/libarchive/test/test_read_format_zip_msdos.c
+++ b/libarchive/test/test_read_format_zip_msdos.c
@@ -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);
}
diff --git a/libarchive/test/test_read_format_zip_msdos.zip.uu b/libarchive/test/test_read_format_zip_msdos.zip.uu
index 6e9fd9a6..1691ca97 100644
--- a/libarchive/test/test_read_format_zip_msdos.zip.uu
+++ b/libarchive/test/test_read_format_zip_msdos.zip.uu
@@ -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@```%``````````