summaryrefslogtreecommitdiff
path: root/t/20_bug_github11.t
diff options
context:
space:
mode:
Diffstat (limited to 't/20_bug_github11.t')
-rw-r--r--t/20_bug_github11.t39
1 files changed, 39 insertions, 0 deletions
diff --git a/t/20_bug_github11.t b/t/20_bug_github11.t
new file mode 100644
index 0000000..5bad5bd
--- /dev/null
+++ b/t/20_bug_github11.t
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+
+# Github 11: "CRC or size mismatch" when extracting member second time
+# Test for correct functionality to prevent regression
+
+use strict;
+use warnings;
+
+use Archive::Zip qw( :ERROR_CODES );
+use File::Spec;
+use File::Path;
+use t::common;
+
+use Test::More tests => 2;
+
+# create test env
+my $GH_ISSUE = 'github11';
+my $TEST_NAME = "20_bug_$GH_ISSUE";
+my $TEST_DIR = File::Spec->catdir(TESTDIR, $TEST_NAME);
+mkpath($TEST_DIR);
+
+# test 1
+my $DATA_DIR = File::Spec->catfile('t', 'data');
+my $GOOD_ZIP_FILE = File::Spec->catfile($DATA_DIR, "good_${GH_ISSUE}.zip");
+my $GOOD_ZIP = Archive::Zip->new($GOOD_ZIP_FILE);
+my $MEMBER_FILE = 'FILE';
+my $member = $GOOD_ZIP->memberNamed($MEMBER_FILE);
+my $OUT_FILE = File::Spec->catfile($TEST_DIR, "out");
+# Extracting twice triggered the bug
+$member->extractToFileNamed($OUT_FILE);
+is($member->extractToFileNamed($OUT_FILE), AZ_OK, 'Testing known good zip');
+
+# test 2
+my $BAD_ZIP_FILE = File::Spec->catfile($DATA_DIR, "bad_${GH_ISSUE}.zip");
+my $BAD_ZIP = Archive::Zip->new($BAD_ZIP_FILE);
+$member = $BAD_ZIP->memberNamed($MEMBER_FILE);
+# Extracting twice triggered the bug
+$member->extractToFileNamed($OUT_FILE);
+is($member->extractToFileNamed($OUT_FILE), AZ_OK, 'Testing known bad zip');