From f5b2cf3dd6976ae53b2f3c9618b0087a0646cc7d Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Wed, 1 Nov 2017 19:25:24 -0500 Subject: [PATCH] - fix Zip Decompress Parent Path Injection #1968 bug - add valid patch check test - add vulnearbility triggering zip archive and test - remove temporary test output files - if possible, redirect temporary file generation to temp directory or - delete temporary files after tests --- Zip/src/Decompress.cpp | 4 +- Zip/src/ZipCommon.cpp | 20 ++++- Zip/testsuite/data/vuln.zip | Bin 0 -> 160 bytes Zip/testsuite/some/recursive/dir/test.file | 1 - Zip/testsuite/src/CompressTest.cpp | 37 ++++---- Zip/testsuite/src/ZipTest.cpp | 90 ++++++++++++++++--- Zip/testsuite/src/ZipTest.h | 6 +- Zip/testsuite/test.dat | 49 ---------- Zip/testsuite/testdir/testdir2/testfile3.txt | 49 ---------- Zip/testsuite/testdir/testfile.txt | 49 ---------- Zip/testsuite/testdir/testfile2.txt | 49 ---------- Zip/testsuite/testfile.txt | 49 ---------- Zip/testsuite/testfile2.txt | 49 ---------- Zip/testsuite/testfile3.txt | 49 ---------- 14 files changed, 122 insertions(+), 379 deletions(-) create mode 100644 Zip/testsuite/data/vuln.zip delete mode 100644 Zip/testsuite/some/recursive/dir/test.file delete mode 100644 Zip/testsuite/test.dat delete mode 100644 Zip/testsuite/testdir/testdir2/testfile3.txt delete mode 100644 Zip/testsuite/testdir/testfile.txt delete mode 100644 Zip/testsuite/testdir/testfile2.txt delete mode 100644 Zip/testsuite/testfile.txt delete mode 100644 Zip/testsuite/testfile2.txt delete mode 100644 Zip/testsuite/testfile3.txt diff --git a/Zip/src/Decompress.cpp b/Zip/src/Decompress.cpp index 630bcc7ac..367735534 100644 --- a/Zip/src/Decompress.cpp +++ b/Zip/src/Decompress.cpp @@ -80,7 +80,7 @@ bool Decompress::handleZipEntry(std::istream& zipStream, const ZipLocalFileHeade { std::string dirName = hdr.getFileName(); if (!ZipCommon::isValidPath(dirName)) - throw ZipException("Illegal entry name " + dirName + " containing parent directory reference"); + throw ZipException("Illegal entry name " + dirName); Poco::Path dir(_outDir, dirName); dir.makeDirectory(); Poco::File aFile(dir); @@ -100,7 +100,7 @@ bool Decompress::handleZipEntry(std::istream& zipStream, const ZipLocalFileHeade } if (!ZipCommon::isValidPath(fileName)) - throw ZipException("Illegal entry name " + fileName + " containing parent directory reference"); + throw ZipException("Illegal entry name " + fileName); Poco::Path file(fileName); file.makeFile(); diff --git a/Zip/src/ZipCommon.cpp b/Zip/src/ZipCommon.cpp index 60c6b29bc..eb43c6372 100644 --- a/Zip/src/ZipCommon.cpp +++ b/Zip/src/ZipCommon.cpp @@ -13,6 +13,7 @@ #include "Poco/Zip/ZipCommon.h" +#include "Poco/Path.h" namespace Poco { @@ -21,15 +22,26 @@ namespace Zip { bool ZipCommon::isValidPath(const std::string& path) { + + if (!Path(path).isRelative()) + return false; if (path == "..") return false; - if (path.compare(0, 3, "../") == 0) + if ((path.size() >= 3) && path.compare(0, 3, "../") == 0) return false; - if (path.compare(0, 3, "..\\") == 0) + if ((path.size() >= 3) && path.compare(0, 3, "..\\") == 0) return false; - if (path.find("/..") != std::string::npos) + if (path.find("/../") != std::string::npos) return false; - if (path.find("\\..") != std::string::npos) + if (path.find("\\..\\") != std::string::npos) + return false; + if (path.find("/..\\") != std::string::npos) + return false; + if (path.find("\\../") != std::string::npos) + return false; + if ((path.size() >= 2) && path.compare(0, 2, "~/") == 0) + return false; + if (path.size() > 0 && (path[0] == '/' || path[0] == '\\')) return false; return true; } diff --git a/Zip/testsuite/data/vuln.zip b/Zip/testsuite/data/vuln.zip new file mode 100644 index 0000000000000000000000000000000000000000..f908634228b043b6fae9f9833e558ec1125b1ad4 GIT binary patch literal 160 zcmWIWW@h1H0D;{Tm>gA7BRetu{OCj)cP`X7 FileMap; std::cout << std::endl; - std::map files; + FileMap files; files["data1.bin"] = static_cast(KB)*4096+1; files["data2.bin"] = static_cast(KB)*16; files["data3.bin"] = static_cast(KB)*4096-1; - for(std::map::const_iterator it = files.begin(); it != files.end(); it++) + for(FileMap::const_iterator it = files.begin(); it != files.end(); it++) { std::cout << '\t' << "createDataFile(" << it->first << ", " << it->second << ");" << std::endl; createDataFile(it->first, it->second); } - std::ofstream out("zip64.zip", std::ios::binary | std::ios::trunc); + std::ofstream out(Poco::Path::temp() + "zip64.zip", std::ios::binary | std::ios::trunc); Compress c(out, true, true); - for(std::map::const_iterator it = files.begin(); it != files.end(); it++) + for(FileMap::const_iterator it = files.begin(); it != files.end(); it++) { const std::string& path = it->first; std::cout << '\t' << "addFile(" << path << ");" << std::endl; c.addFile(path, path, ZipCommon::CM_STORE); } ZipArchive a(c.close()); - for(std::map::const_iterator it = files.begin(); it != files.end(); it++) + for(FileMap::const_iterator it = files.begin(); it != files.end(); it++) { const std::string& path = it->first; Poco::UInt64 size = it->second; @@ -187,6 +188,10 @@ void CompressTest::testZip64() assert(file.getUncompressedSize() == size); assert(file.getCompressedSize() == size); } + for (FileMap::const_iterator it = files.begin(); it != files.end(); it++) + { + Poco::File(it->first).remove(); + } } diff --git a/Zip/testsuite/src/ZipTest.cpp b/Zip/testsuite/src/ZipTest.cpp index fd079eafe..b8cda8a03 100644 --- a/Zip/testsuite/src/ZipTest.cpp +++ b/Zip/testsuite/src/ZipTest.cpp @@ -100,7 +100,7 @@ void ZipTest::testCrcAndSizeAfterData() std::string testFile = getTestFile("data", "data.zip"); std::ifstream inp(testFile.c_str(), std::ios::binary); assert (inp.good()); - Decompress dec(inp, Poco::Path()); + Decompress dec(inp, Poco::Path::temp()); dec.EError += Poco::Delegate >(this, &ZipTest::onDecompressError); dec.decompressAllFiles(); dec.EError -= Poco::Delegate >(this, &ZipTest::onDecompressError); @@ -124,7 +124,7 @@ void ZipTest::testCrcAndSizeAfterDataWithArchive() Poco::Path path(it->second.getFileName()); if (path.isFile()) { - std::ofstream os("test.dat"); + std::ofstream os(Poco::Path::temp() + "test.dat"); Poco::StreamCopier::copyStream(zipis,os); } } @@ -161,7 +161,7 @@ void ZipTest::testDecompress() std::string testFile = getTestFile("data", "test.zip"); std::ifstream inp(testFile.c_str(), std::ios::binary); assert (inp.good()); - Decompress dec(inp, Poco::Path()); + Decompress dec(inp, Poco::Path::temp()); dec.EError += Poco::Delegate >(this, &ZipTest::onDecompressError); dec.decompressAllFiles(); dec.EError -= Poco::Delegate >(this, &ZipTest::onDecompressError); @@ -175,7 +175,35 @@ void ZipTest::testDecompressFlat() std::string testFile = getTestFile("data", "test.zip"); std::ifstream inp(testFile.c_str(), std::ios::binary); assert (inp.good()); - Decompress dec(inp, Poco::Path(), true); + Decompress dec(inp, Poco::Path::temp(), true); + dec.EError += Poco::Delegate >(this, &ZipTest::onDecompressError); + dec.decompressAllFiles(); + dec.EError -= Poco::Delegate >(this, &ZipTest::onDecompressError); + assert (_errCnt == 0); + assert (!dec.mapping().empty()); +} + + +void ZipTest::testDecompressVuln() +{ + std::string testFile = getTestFile("data", "vuln.zip"); + std::ifstream inp(testFile.c_str(), std::ios::binary); + assert(inp.good()); + Decompress dec(inp, Poco::Path::temp()); + dec.EError += Poco::Delegate >(this, &ZipTest::onDecompressError); + dec.decompressAllFiles(); + dec.EError -= Poco::Delegate >(this, &ZipTest::onDecompressError); + assert (_errCnt == 1); + assert (dec.mapping().empty()); +} + + +void ZipTest::testDecompressFlatVuln() +{ + std::string testFile = getTestFile("data", "vuln.zip"); + std::ifstream inp(testFile.c_str(), std::ios::binary); + assert(inp.good()); + Decompress dec(inp, Poco::Path::temp(), true); dec.EError += Poco::Delegate >(this, &ZipTest::onDecompressError); dec.decompressAllFiles(); dec.EError -= Poco::Delegate >(this, &ZipTest::onDecompressError); @@ -196,8 +224,8 @@ void ZipTest::verifyDataFile(const std::string& path, Poco::UInt64 size) std::memset(buffer2.begin(), 0, buffer2.size()); Poco::UInt64 bytesToRead = std::min(size, static_cast(buffer2.size())); in.read(buffer2.begin(), bytesToRead); - assert(!in.fail() ); - assert(std::memcmp(buffer1.begin(), buffer2.begin(), static_cast(bytesToRead)) == 0); + assert (!in.fail() ); + assert (std::memcmp(buffer1.begin(), buffer2.begin(), static_cast(bytesToRead)) == 0); size -= bytesToRead; } char c; @@ -209,9 +237,9 @@ void ZipTest::verifyDataFile(const std::string& path, Poco::UInt64 size) void ZipTest::testDecompressZip64() { std::map files; - files["data1.bin"] = static_cast(KB)*4096+1; - files["data2.bin"] = static_cast(KB)*16; - files["data3.bin"] = static_cast(KB)*4096-1; + files[Poco::Path::temp() + "data1.bin"] = static_cast(KB)*4096+1; + files[Poco::Path::temp() + "data2.bin"] = static_cast(KB)*16; + files[Poco::Path::temp() + "data3.bin"] = static_cast(KB)*4096-1; for(std::map::const_iterator it = files.begin(); it != files.end(); it++) { @@ -219,8 +247,8 @@ void ZipTest::testDecompressZip64() if(file.exists()) file.remove(); } - std::ifstream in("zip64.zip", std::ios::binary); - Decompress c(in, "."); + std::ifstream in(Poco::Path::temp() + "zip64.zip", std::ios::binary); + Decompress c(in, Poco::Path::temp()); c.decompressAllFiles(); for(std::map::const_iterator it = files.begin(); it != files.end(); it++) { @@ -229,6 +257,43 @@ void ZipTest::testDecompressZip64() } +void ZipTest::testValidPath() +{ + assert (ZipCommon::isValidPath(".")); + assert (ZipCommon::isValidPath("file.txt")); + assert (ZipCommon::isValidPath(".file.txt")); + assert (ZipCommon::isValidPath("..file.txt")); + assert (ZipCommon::isValidPath("file.txt..")); + assert (ZipCommon::isValidPath(".file..txt")); + assert (ZipCommon::isValidPath("~file..txt")); + assert (ZipCommon::isValidPath("~file/~")); + assert (ZipCommon::isValidPath("dir/~")); + assert (ZipCommon::isValidPath("some")); + assert (ZipCommon::isValidPath("some/dir")); + assert (ZipCommon::isValidPath("some/dir/or/another")); + assert (ZipCommon::isValidPath("some/dir/./another")); + assert (ZipCommon::isValidPath("some/dir/or/another/file.txt")); + assert (ZipCommon::isValidPath("s~me\\d.r\\.or..\\an..her\\file.txt")); + assert (ZipCommon::isValidPath("some\\dir\\or\\another")); + assert (ZipCommon::isValidPath("some\\dir\\or\\another\\file.txt")); + assert (ZipCommon::isValidPath("s~me\\d.r/.or..\\an..her\\file.txt")); + + assert (!ZipCommon::isValidPath("/../")); + assert (!ZipCommon::isValidPath("/")); + assert (!ZipCommon::isValidPath("\\..\\")); + assert (!ZipCommon::isValidPath("/..\\")); + assert (!ZipCommon::isValidPath("\\../")); + assert (!ZipCommon::isValidPath("..")); + assert (!ZipCommon::isValidPath("~/")); + assert (!ZipCommon::isValidPath("~/~")); + assert (!ZipCommon::isValidPath("/~")); + assert (!ZipCommon::isValidPath("/file.txt")); + assert (!ZipCommon::isValidPath("~/file.txt")); + assert (!ZipCommon::isValidPath("some/dir/or/../another/file.txt")); + assert (!ZipCommon::isValidPath("C:\\Windows\\system32")); +} + + void ZipTest::onDecompressError(const void* pSender, std::pair& info) { ++_errCnt; @@ -255,9 +320,12 @@ CppUnit::Test* ZipTest::suite() CppUnit_addTest(pSuite, ZipTest, testDecompressSingleFileInDir); CppUnit_addTest(pSuite, ZipTest, testDecompress); CppUnit_addTest(pSuite, ZipTest, testDecompressFlat); + CppUnit_addTest(pSuite, ZipTest, testDecompressVuln); + CppUnit_addTest(pSuite, ZipTest, testDecompressFlatVuln); CppUnit_addTest(pSuite, ZipTest, testCrcAndSizeAfterData); CppUnit_addTest(pSuite, ZipTest, testCrcAndSizeAfterDataWithArchive); CppUnit_addTest(pSuite, ZipTest, testDecompressZip64); + CppUnit_addTest(pSuite, ZipTest, testValidPath); return pSuite; } diff --git a/Zip/testsuite/src/ZipTest.h b/Zip/testsuite/src/ZipTest.h index 4814b8704..0cdda9aec 100644 --- a/Zip/testsuite/src/ZipTest.h +++ b/Zip/testsuite/src/ZipTest.h @@ -29,15 +29,17 @@ public: void testDecompressSingleFile(); void testDecompressSingleFileInDir(); void testDecompress(); + void testDecompressFlat(); + void testDecompressVuln(); + void testDecompressFlatVuln(); void testCrcAndSizeAfterData(); void testCrcAndSizeAfterDataWithArchive(); - void testDecompressFlat(); - static const Poco::UInt64 KB = 1024; static const Poco::UInt64 MB = 1024*KB; void verifyDataFile(const std::string& path, Poco::UInt64 size); void testDecompressZip64(); + void testValidPath(); void setUp(); void tearDown(); diff --git a/Zip/testsuite/test.dat b/Zip/testsuite/test.dat deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/test.dat +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testdir/testdir2/testfile3.txt b/Zip/testsuite/testdir/testdir2/testfile3.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testdir/testdir2/testfile3.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testdir/testfile.txt b/Zip/testsuite/testdir/testfile.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testdir/testfile.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testdir/testfile2.txt b/Zip/testsuite/testdir/testfile2.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testdir/testfile2.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testfile.txt b/Zip/testsuite/testfile.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testfile.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testfile2.txt b/Zip/testsuite/testfile2.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testfile2.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium. diff --git a/Zip/testsuite/testfile3.txt b/Zip/testsuite/testfile3.txt deleted file mode 100644 index e17f2f0a5..000000000 --- a/Zip/testsuite/testfile3.txt +++ /dev/null @@ -1,49 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vitae arcu -ac arcu semper mollis. Donec lobortis mi at dui. Integer placerat, -sapien at suscipit faucibus, mi quam sodales sapien, non accumsan enim -justo sit amet sem. Proin fermentum dui vitae metus. Donec a velit et -lectus fermentum bibendum. Donec risus magna, fermentum tempor, tempor -cursus, elementum ac, turpis. Suspendisse ultricies tincidunt quam. Nam -quis risus. Suspendisse in lacus. Vivamus et est ac nisi sollicitudin -ullamcorper. Sed vitae ligula non sem suscipit tempus. Donec tincidunt, -justo nec tristique euismod, sapien velit consequat ante, in vestibulum -dolor justo nec orci. Sed placerat eros. Suspendisse potenti. Vestibulum -eu sem at ante aliquet varius. In quis diam nec libero pretium -vestibulum. Morbi ipsum. Vivamus eros. - -Nam pellentesque ante. Donec sit amet nisl. Vestibulum blandit risus sit -amet quam facilisis mollis. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Nulla mattis orci a diam. Duis ultricies massa rhoncus -neque. Morbi hendrerit arcu vel mi. Suspendisse lorem. Pellentesque non -nunc molestie metus pretium tristique. Maecenas ante. Nunc sagittis. - -Proin ornare. Donec mi tellus, venenatis nec, ultrices ac, hendrerit in, -quam. Mauris nunc. Vivamus cursus rhoncus felis. Nunc at justo. In hac -habitasse platea dictumst. Nulla metus sapien, cursus nec, luctus eget, -malesuada sed, odio. Sed augue orci, sollicitudin id, auctor eu, -porttitor id, eros. Proin arcu dolor, iaculis quis, ullamcorper sit -amet, ullamcorper nec, ante. Sed dictum luctus est. Phasellus nibh. -Morbi fringilla magna et mi. In eleifend sem non dui luctus suscipit. -Duis dapibus. Proin molestie. Cras vel dui. - -In et orci vel erat euismod sodales. Integer porta. Vivamus congue -turpis eu eros tincidunt fermentum. Curabitur consequat ultrices mi. -Praesent sit amet ante. Proin ante. Phasellus vitae nibh. Aliquam ipsum -massa, pretium quis, mattis sed, sagittis sit amet, justo. Integer quam. -Aenean leo erat, commodo quis, elementum sit amet, placerat sed, lacus. -Nam a nunc in sapien scelerisque sodales. Phasellus luctus arcu at -nulla. Pellentesque habitant morbi tristique senectus et netus et -malesuada fames ac turpis egestas. Donec facilisis. - -Nam scelerisque lacus a eros. Praesent ac arcu et nisl eleifend commodo. -Aenean vestibulum, augue vel posuere mattis, sem massa varius mauris, -non porttitor diam felis eu libero. Suspendisse vulputate, urna quis -dictum scelerisque, risus est pharetra orci, a iaculis dui sem quis -quam. Nam imperdiet quam eget velit. Mauris dui lacus, posuere in, -cursus eget, ultrices ut, eros. Etiam eget purus. Curabitur accumsan -lacinia urna. Donec aliquet dictum erat. Nulla ac magna. Quisque -ultrices vehicula lacus. Fusce eu quam quis est mollis adipiscing. -Pellentesque non libero at eros vulputate iaculis. Praesent vitae orci -ac sapien laoreet scelerisque. Ut ut libero. Vivamus massa urna, -convallis at, laoreet a, adipiscing et, eros. Suspendisse feugiat -malesuada felis. Suspendisse a odio eget tortor tempus pretium.