diff options
| author | Colin Cross <ccross@android.com> | 2018-11-16 22:43:41 -0800 |
|---|---|---|
| committer | Colin Cross <ccross@android.com> | 2018-11-29 11:22:55 -0800 |
| commit | 2b41ccaa462f5faa92edde97504b785ddca415f5 (patch) | |
| tree | f9308a43745ebd606ec0799663b2c1822078bea4 /libartbase | |
| parent | 90402ad6df38a5d4f268903aee5d7fe56791265f (diff) | |
| download | art-2b41ccaa462f5faa92edde97504b785ddca415f5.tar.gz art-2b41ccaa462f5faa92edde97504b785ddca415f5.tar.bz2 art-2b41ccaa462f5faa92edde97504b785ddca415f5.zip | |
Extract dex file if it is uncompressed but unaligned
A dex file would normally only be left in the zip file if it was both
uncompressed and unaligned, but explicitly setting CopyOptions::kNever
through --copy-dex-file=false would only check if the dex file was
uncompressed, not if it was aligned. Add a required alignment
argument to ZipEntry::MapDirectlyOrExtract so that the contents
will be extracted into memory if they don't meet the alignment
requirement.
Bug: 119412419
Test: m test-art-host-gtest-oat_writer_test
Change-Id: I4587e22165ee0a951ffca7db9a6f5c0d1ed2e56a
Diffstat (limited to 'libartbase')
| -rw-r--r-- | libartbase/base/zip_archive.cc | 5 | ||||
| -rw-r--r-- | libartbase/base/zip_archive.h | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/libartbase/base/zip_archive.cc b/libartbase/base/zip_archive.cc index 8ceea83be4..a7f4b28c84 100644 --- a/libartbase/base/zip_archive.cc +++ b/libartbase/base/zip_archive.cc @@ -189,8 +189,9 @@ MemMap ZipEntry::MapDirectlyFromFile(const char* zip_filename, std::string* erro MemMap ZipEntry::MapDirectlyOrExtract(const char* zip_filename, const char* entry_filename, - std::string* error_msg) { - if (IsUncompressed() && GetFileDescriptor(handle_) >= 0) { + std::string* error_msg, + size_t alignment) { + if (IsUncompressed() && IsAlignedTo(alignment) && GetFileDescriptor(handle_) >= 0) { std::string local_error_msg; MemMap ret = MapDirectlyFromFile(zip_filename, &local_error_msg); if (ret.IsValid()) { diff --git a/libartbase/base/zip_archive.h b/libartbase/base/zip_archive.h index d326a9e9d7..fc04ec1e91 100644 --- a/libartbase/base/zip_archive.h +++ b/libartbase/base/zip_archive.h @@ -59,7 +59,8 @@ class ZipEntry { MemMap MapDirectlyOrExtract(const char* zip_filename, const char* entry_filename, - std::string* error_msg); + std::string* error_msg, + size_t alignment); uint32_t GetUncompressedLength(); uint32_t GetCrc32(); |
