Index: third_party/zlib/google/zip_reader_unittest.cc |
diff --git a/third_party/zlib/google/zip_reader_unittest.cc b/third_party/zlib/google/zip_reader_unittest.cc |
index df20e6fe3367a93cb810dd8c5008b821bf2ad444..a137d9dd1bc0b85fb80740f12799eb44f28f9d37 100644 |
--- a/third_party/zlib/google/zip_reader_unittest.cc |
+++ b/third_party/zlib/google/zip_reader_unittest.cc |
@@ -15,6 +15,7 @@ |
#include "base/md5.h" |
#include "base/path_service.h" |
#include "base/run_loop.h" |
+#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/time/time.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -534,4 +535,42 @@ TEST_F(ZipReaderTest, ExtractToFileAsync_Directory) { |
ASSERT_TRUE(base::DirectoryExists(target_file)); |
} |
+TEST_F(ZipReaderTest, ExtractCurrentEntryToString) { |
+ // test_mismatch_size.zip contains files with names from 0.txt to 7.txt with |
+ // sizes from 0 to 7 bytes respectively, being the contents of each file a |
+ // substring of "0123456" starting at '0'. |
+ base::FilePath test_zip_file = |
+ test_data_dir_.AppendASCII("test_mismatch_size.zip"); |
+ |
+ ZipReader reader; |
+ std::string contents; |
+ ASSERT_TRUE(reader.Open(test_zip_file)); |
+ |
+ for (size_t i = 0; i < 8; i++) { |
+ SCOPED_TRACE(base::StringPrintf("Processing %d.txt", static_cast<int>(i))); |
+ |
+ base::FilePath file_name = base::FilePath::FromUTF8Unsafe( |
+ base::StringPrintf("%d.txt", static_cast<int>(i))); |
+ ASSERT_TRUE(reader.LocateAndOpenEntry(file_name)); |
+ |
+ if (i > 1) { |
+ // Off by one byte read limit: must fail. |
+ EXPECT_FALSE(reader.ExtractCurrentEntryToString(i - 1, &contents)); |
+ } |
+ |
+ if (i > 0) { |
+ // Exact byte read limit: must pass. |
+ EXPECT_TRUE(reader.ExtractCurrentEntryToString(i, &contents)); |
+ EXPECT_EQ(i, contents.size()); |
+ EXPECT_EQ(0, memcmp(contents.c_str(), "0123456", i)); |
+ } |
+ |
+ // More than necessary byte read limit: must pass. |
+ EXPECT_TRUE(reader.ExtractCurrentEntryToString(16, &contents)); |
+ EXPECT_EQ(i, contents.size()); |
+ EXPECT_EQ(0, memcmp(contents.c_str(), "0123456", i)); |
+ } |
+ reader.Close(); |
+} |
+ |
} // namespace zip |