diff options
| author | Narayan Kamath <narayan@google.com> | 2015-03-19 09:44:22 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2015-03-19 09:44:22 +0000 |
| commit | 5403da271b07a134d783fca98fa99bcca6f1567e (patch) | |
| tree | d68895c00d0b2ee63b709897b0cce2e198eb33e8 | |
| parent | e2e548aaedabb7ae185e9899159a0e7aec4d59c8 (diff) | |
| parent | 7d79c9f54dd0f0b759ca7215a92bc6a13cbd7202 (diff) | |
| download | system_core-5403da271b07a134d783fca98fa99bcca6f1567e.zip system_core-5403da271b07a134d783fca98fa99bcca6f1567e.tar.gz system_core-5403da271b07a134d783fca98fa99bcca6f1567e.tar.bz2 | |
am 7d79c9f5: am b054582b: Merge "libziparchive: fix issue with a directory with one file"
* commit '7d79c9f54dd0f0b759ca7215a92bc6a13cbd7202':
libziparchive: fix issue with a directory with one file
| -rw-r--r-- | libziparchive/testdata/declaredlength.zip | bin | 0 -> 886 bytes | |||
| -rw-r--r-- | libziparchive/zip_archive.cc | 2 | ||||
| -rw-r--r-- | libziparchive/zip_archive_test.cc | 16 |
3 files changed, 17 insertions, 1 deletions
diff --git a/libziparchive/testdata/declaredlength.zip b/libziparchive/testdata/declaredlength.zip Binary files differnew file mode 100644 index 0000000..773380c --- /dev/null +++ b/libziparchive/testdata/declaredlength.zip diff --git a/libziparchive/zip_archive.cc b/libziparchive/zip_archive.cc index e820f2a..6475649 100644 --- a/libziparchive/zip_archive.cc +++ b/libziparchive/zip_archive.cc @@ -824,7 +824,7 @@ static int32_t FindEntry(const ZipArchive* archive, const int ent, // name in the central directory. if (lfh->file_name_length == nameLen) { const off64_t name_offset = local_header_offset + sizeof(LocalFileHeader); - if (name_offset + lfh->file_name_length >= cd_offset) { + if (name_offset + lfh->file_name_length > cd_offset) { ALOGW("Zip: Invalid declared length"); return kInvalidOffset; } diff --git a/libziparchive/zip_archive_test.cc b/libziparchive/zip_archive_test.cc index c8dafa9..64faa6d 100644 --- a/libziparchive/zip_archive_test.cc +++ b/libziparchive/zip_archive_test.cc @@ -171,6 +171,22 @@ TEST(ziparchive, FindEntry) { CloseArchive(handle); } +TEST(ziparchive, TestInvalidDeclaredLength) { + ZipArchiveHandle handle; + ASSERT_EQ(0, OpenArchiveWrapper("declaredlength.zip", &handle)); + + void* iteration_cookie; + ASSERT_EQ(0, StartIteration(handle, &iteration_cookie, NULL)); + + ZipEntryName name; + ZipEntry data; + + ASSERT_EQ(Next(iteration_cookie, &data, &name), 0); + ASSERT_EQ(Next(iteration_cookie, &data, &name), 0); + + CloseArchive(handle); +} + TEST(ziparchive, ExtractToMemory) { ZipArchiveHandle handle; ASSERT_EQ(0, OpenArchiveWrapper(kValidZip, &handle)); |
