OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <set> | 5 #include <set> |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/scoped_temp_dir.h" | 9 #include "base/scoped_temp_dir.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 } | 92 } |
93 | 93 |
94 TEST_F(ZipTest, UnzipUncompressed) { | 94 TEST_F(ZipTest, UnzipUncompressed) { |
95 TestUnzipFile(FILE_PATH_LITERAL("test_nocompress.zip"), true); | 95 TestUnzipFile(FILE_PATH_LITERAL("test_nocompress.zip"), true); |
96 } | 96 } |
97 | 97 |
98 TEST_F(ZipTest, UnzipEvil) { | 98 TEST_F(ZipTest, UnzipEvil) { |
99 FilePath path; | 99 FilePath path; |
100 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 100 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
101 path = path.AppendASCII("zip").AppendASCII("evil.zip"); | 101 path = path.AppendASCII("zip").AppendASCII("evil.zip"); |
102 ASSERT_FALSE(zip::Unzip(path, test_dir_)); | 102 // Unzip the zip file into a sub directory of test_dir_ so evil.zip |
103 FilePath evil_file = test_dir_; | 103 // won't create a persistent file outside test_dir_ in case of a |
| 104 // failure. |
| 105 FilePath output_dir = test_dir_.AppendASCII("out"); |
| 106 ASSERT_FALSE(zip::Unzip(path, output_dir)); |
| 107 FilePath evil_file = output_dir; |
104 evil_file = evil_file.AppendASCII( | 108 evil_file = evil_file.AppendASCII( |
105 "../levilevilevilevilevilevilevilevilevilevilevilevil"); | 109 "../levilevilevilevilevilevilevilevilevilevilevilevil"); |
106 ASSERT_FALSE(file_util::PathExists(evil_file)); | 110 ASSERT_FALSE(file_util::PathExists(evil_file)); |
107 } | 111 } |
108 | 112 |
109 TEST_F(ZipTest, UnzipEvil2) { | 113 TEST_F(ZipTest, UnzipEvil2) { |
110 FilePath path; | 114 FilePath path; |
111 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 115 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
112 path = path.AppendASCII("zip").AppendASCII("evil_via_invalid_utf8.zip"); | 116 path = path.AppendASCII("zip").AppendASCII("evil_via_invalid_utf8.zip"); |
113 ASSERT_TRUE(zip::Unzip(path, test_dir_)); | 117 // See the comment at UnzipEvil() for why we do this. |
114 FilePath evil_file = test_dir_; | 118 FilePath output_dir = test_dir_.AppendASCII("out"); |
| 119 ASSERT_TRUE(zip::Unzip(path, output_dir)); |
| 120 FilePath evil_file = output_dir; |
115 evil_file = evil_file.AppendASCII("../evil.txt"); | 121 evil_file = evil_file.AppendASCII("../evil.txt"); |
116 ASSERT_FALSE(file_util::PathExists(evil_file)); | 122 ASSERT_FALSE(file_util::PathExists(evil_file)); |
117 } | 123 } |
118 | 124 |
119 TEST_F(ZipTest, Zip) { | 125 TEST_F(ZipTest, Zip) { |
120 FilePath src_dir; | 126 FilePath src_dir; |
121 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &src_dir)); | 127 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &src_dir)); |
122 src_dir = src_dir.AppendASCII("zip").AppendASCII("test"); | 128 src_dir = src_dir.AppendASCII("zip").AppendASCII("test"); |
123 | 129 |
124 ScopedTempDir temp_dir; | 130 ScopedTempDir temp_dir; |
(...skipping 11 matching lines...) Expand all Loading... |
136 | 142 |
137 ScopedTempDir temp_dir; | 143 ScopedTempDir temp_dir; |
138 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 144 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
139 FilePath zip_file = temp_dir.path().AppendASCII("out.zip"); | 145 FilePath zip_file = temp_dir.path().AppendASCII("out.zip"); |
140 | 146 |
141 EXPECT_TRUE(zip::Zip(src_dir, zip_file, false)); | 147 EXPECT_TRUE(zip::Zip(src_dir, zip_file, false)); |
142 TestUnzipFile(zip_file, false); | 148 TestUnzipFile(zip_file, false); |
143 } | 149 } |
144 | 150 |
145 } // namespace | 151 } // namespace |
OLD | NEW |