diff options
author | Ryan Mitchell <rtmitchell@google.com> | 2020-11-13 23:55:20 +0000 |
---|---|---|
committer | Ryan Mitchell <rtmitchell@google.com> | 2020-11-13 23:55:20 +0000 |
commit | 55ef6167a2c235bd88c7216238b2001b46795b79 (patch) | |
tree | 5a63ff5e6b8a0ade4ce5aa2c4d663d62a7d993d9 /libs/androidfw/ChunkIterator.cpp | |
parent | 6ca48473e533a8b89abac6294a0bb8130b8c8c89 (diff) |
Revert "libandroidfw hardening for IncFs"
Revert "Move map_ptr to incfs namspace"
Revert submission 12787270
Reason for revert: b/173250495
Reverted Changes:
I5cd1bc8a2:libandroidfw hardening for IncFs
Ice5dbcfb2:Move map_ptr to incfs namspace
I29ccdc8ed:Do not cache bag parent stack until requested
I1e9e9acaa:Cache resolved theme values
Change-Id: Ib90ef68339710086df41e9abe0833a542d03a74f
Diffstat (limited to 'libs/androidfw/ChunkIterator.cpp')
-rw-r--r-- | libs/androidfw/ChunkIterator.cpp | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/libs/androidfw/ChunkIterator.cpp b/libs/androidfw/ChunkIterator.cpp index 25c8aa64e492..8fc321968055 100644 --- a/libs/androidfw/ChunkIterator.cpp +++ b/libs/androidfw/ChunkIterator.cpp @@ -15,7 +15,6 @@ */ #include "androidfw/Chunk.h" -#include "androidfw/Util.h" #include "android-base/logging.h" @@ -24,11 +23,11 @@ namespace android { Chunk ChunkIterator::Next() { CHECK(len_ != 0) << "called Next() after last chunk"; - const incfs::map_ptr<ResChunk_header> this_chunk = next_chunk_; - CHECK((bool) this_chunk) << "Next() called without verifying next chunk"; + const ResChunk_header* this_chunk = next_chunk_; // We've already checked the values of this_chunk, so safely increment. - next_chunk_ = this_chunk.offset(dtohl(this_chunk->size)).convert<ResChunk_header>(); + next_chunk_ = reinterpret_cast<const ResChunk_header*>( + reinterpret_cast<const uint8_t*>(this_chunk) + dtohl(this_chunk->size)); len_ -= dtohl(this_chunk->size); if (len_ != 0) { @@ -37,7 +36,7 @@ Chunk ChunkIterator::Next() { VerifyNextChunk(); } } - return Chunk(this_chunk.verified()); + return Chunk(this_chunk); } // TODO(b/111401637) remove this and have full resource file verification @@ -48,13 +47,6 @@ bool ChunkIterator::VerifyNextChunkNonFatal() { last_error_was_fatal_ = false; return false; } - - if (!next_chunk_) { - last_error_ = "failed to read chunk from data"; - last_error_was_fatal_ = false; - return false; - } - const size_t size = dtohl(next_chunk_->size); if (size > len_) { last_error_ = "chunk size is bigger than given data"; @@ -66,10 +58,12 @@ bool ChunkIterator::VerifyNextChunkNonFatal() { // Returns false if there was an error. bool ChunkIterator::VerifyNextChunk() { + const uintptr_t header_start = reinterpret_cast<uintptr_t>(next_chunk_); + // This data must be 4-byte aligned, since we directly // access 32-bit words, which must be aligned on // certain architectures. - if (!util::IsFourByteAligned(next_chunk_)) { + if (header_start & 0x03) { last_error_ = "header not aligned on 4-byte boundary"; return false; } @@ -79,11 +73,6 @@ bool ChunkIterator::VerifyNextChunk() { return false; } - if (!next_chunk_) { - last_error_ = "failed to read chunk from data"; - return false; - } - const size_t header_size = dtohs(next_chunk_->headerSize); const size_t size = dtohl(next_chunk_->size); if (header_size < sizeof(ResChunk_header)) { @@ -101,7 +90,7 @@ bool ChunkIterator::VerifyNextChunk() { return false; } - if ((size | header_size) & 0x03U) { + if ((size | header_size) & 0x03) { last_error_ = "header sizes are not aligned on 4-byte boundary"; return false; } |