| 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 3056aba8ab855d03c91d35c71e7da24db721bdaa..bcd50c4a9e8e53b9e58559b2b1408c3ace9a6872 100644
|
| --- a/third_party/zlib/google/zip_reader_unittest.cc
|
| +++ b/third_party/zlib/google/zip_reader_unittest.cc
|
| @@ -570,24 +570,65 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryToString) {
|
|
|
| if (i > 1) {
|
| // Off by one byte read limit: must fail.
|
| - EXPECT_FALSE(reader.ExtractCurrentEntryToString(i - 1, &contents));
|
| + EXPECT_FALSE(reader.ExtractCurrentEntryToString(i - 1, true, &contents));
|
| }
|
|
|
| if (i > 0) {
|
| // Exact byte read limit: must pass.
|
| - EXPECT_TRUE(reader.ExtractCurrentEntryToString(i, &contents));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(i, true, &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_TRUE(reader.ExtractCurrentEntryToString(16, true, &contents));
|
| EXPECT_EQ(i, contents.size());
|
| EXPECT_EQ(0, memcmp(contents.c_str(), "0123456", i));
|
| }
|
| reader.Close();
|
| }
|
|
|
| +TEST_F(ZipReaderTest, ExtractPartOfCurrentEntry) {
|
| + // 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));
|
| +
|
| + base::FilePath file_name0 = base::FilePath::FromUTF8Unsafe("0.txt");
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name0));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| + EXPECT_FALSE(reader.ExtractCurrentEntryToString(1, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| +
|
| + base::FilePath file_name1 = base::FilePath::FromUTF8Unsafe("1.txt");
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name1));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(1, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "0", 1));
|
| + EXPECT_FALSE(reader.ExtractCurrentEntryToString(2, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| +
|
| + base::FilePath file_name4 = base::FilePath::FromUTF8Unsafe("4.txt");
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(file_name4));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(0, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(2, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "01", 2));
|
| + EXPECT_TRUE(reader.ExtractCurrentEntryToString(4, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "0123", 4));
|
| + EXPECT_FALSE(reader.ExtractCurrentEntryToString(5, false, &contents));
|
| + EXPECT_EQ(0, memcmp(contents.c_str(), "", 0));
|
| +
|
| + reader.Close();
|
| +}
|
| +
|
| // This test exposes http://crbug.com/430959, at least on OS X
|
| TEST_F(ZipReaderTest, DISABLED_LeakDetectionTest) {
|
| for (int i = 0; i < 100000; ++i) {
|
| @@ -610,7 +651,7 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryPrepareFailure) {
|
|
|
| ASSERT_TRUE(reader.Open(test_zip_file_));
|
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| - ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer));
|
| + ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer, -1));
|
| }
|
|
|
| // Test that when WriterDelegate::WriteBytes returns false, no other methods on
|
| @@ -628,7 +669,7 @@ TEST_F(ZipReaderTest, ExtractCurrentEntryWriteBytesFailure) {
|
|
|
| ASSERT_TRUE(reader.Open(test_zip_file_));
|
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| - ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer));
|
| + ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer, -1));
|
| }
|
|
|
| // Test that extraction succeeds when the writer delegate reports all is well.
|
| @@ -645,7 +686,54 @@ TEST_F(ZipReaderTest, ExtractCurrentEntrySuccess) {
|
|
|
| ASSERT_TRUE(reader.Open(test_zip_file_));
|
| ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| - ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer));
|
| + ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer, -1));
|
| +}
|
| +
|
| +// Test that when WriterDelegate::PrepareMock returns false, no other methods on
|
| +// the delegate are called and the partial extraction fails.
|
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntryPrepareFailure) {
|
| + testing::StrictMock<MockWriterDelegate> mock_writer;
|
| +
|
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(false));
|
| +
|
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt"));
|
| + ZipReader reader;
|
| +
|
| + ASSERT_TRUE(reader.Open(test_zip_file_));
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| + ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer, 1));
|
| +}
|
| +
|
| +// Test that when WriterDelegate::WriteBytes returns false, no other methods on
|
| +// the delegate are called and the partial extraction fails.
|
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntryWriteBytesFailure) {
|
| + testing::StrictMock<MockWriterDelegate> mock_writer;
|
| +
|
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(true));
|
| + EXPECT_CALL(mock_writer, WriteBytes(_, _)).WillOnce(Return(false));
|
| +
|
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt"));
|
| + ZipReader reader;
|
| +
|
| + ASSERT_TRUE(reader.Open(test_zip_file_));
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| + ASSERT_FALSE(reader.ExtractCurrentEntry(&mock_writer, 1));
|
| +}
|
| +
|
| +// Test that partial extraction succeeds when the writer delegate reports all is
|
| +// well.
|
| +TEST_F(ZipReaderTest, ExtractFromBeginningOfCurrentEntrySuccess) {
|
| + testing::StrictMock<MockWriterDelegate> mock_writer;
|
| +
|
| + EXPECT_CALL(mock_writer, PrepareOutput()).WillOnce(Return(true));
|
| + EXPECT_CALL(mock_writer, WriteBytes(_, _)).WillRepeatedly(Return(true));
|
| +
|
| + base::FilePath target_path(FILE_PATH_LITERAL("foo/bar/quux.txt"));
|
| + ZipReader reader;
|
| +
|
| + ASSERT_TRUE(reader.Open(test_zip_file_));
|
| + ASSERT_TRUE(reader.LocateAndOpenEntry(target_path));
|
| + ASSERT_TRUE(reader.ExtractCurrentEntry(&mock_writer, 1));
|
| }
|
|
|
| class FileWriterDelegateTest : public ::testing::Test {
|
|
|