summaryrefslogtreecommitdiffstats
path: root/libartbase
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2018-11-16 22:43:41 -0800
committerColin Cross <ccross@android.com>2018-11-29 11:22:55 -0800
commit2b41ccaa462f5faa92edde97504b785ddca415f5 (patch)
treef9308a43745ebd606ec0799663b2c1822078bea4 /libartbase
parent90402ad6df38a5d4f268903aee5d7fe56791265f (diff)
downloadart-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.cc5
-rw-r--r--libartbase/base/zip_archive.h3
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();