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
diff --git a/libs/androidfw/ChunkIterator.cpp b/libs/androidfw/ChunkIterator.cpp
index 25c8aa6..8fc3219 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 @@
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 @@
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 @@
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 @@
// 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 @@
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 @@
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;
}