summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdexfile/dex/dex_file_verifier.cc4
-rw-r--r--libdexfile/dex/dex_file_verifier.h4
2 files changed, 6 insertions, 2 deletions
diff --git a/libdexfile/dex/dex_file_verifier.cc b/libdexfile/dex/dex_file_verifier.cc
index ca62705cc2..ee4b0e6cc8 100644
--- a/libdexfile/dex/dex_file_verifier.cc
+++ b/libdexfile/dex/dex_file_verifier.cc
@@ -3015,6 +3015,10 @@ bool DexFileVerifier::CheckInterSection() {
const dex::MapItem* item = map->list_;
uint32_t count = map->size_;
+ // Avoid allocations, reserve space ahead of time. At most the type-id limit number
+ // of type IDs can be added.
+ defined_classes_.reserve(std::min(header_->class_defs_size_, kTypeIdLimit) + 1);
+
// Cross check the items listed in the map.
for (; count != 0u; --count) {
uint32_t section_offset = item->offset_;
diff --git a/libdexfile/dex/dex_file_verifier.h b/libdexfile/dex/dex_file_verifier.h
index abb48eef41..737e18a517 100644
--- a/libdexfile/dex/dex_file_verifier.h
+++ b/libdexfile/dex/dex_file_verifier.h
@@ -18,9 +18,9 @@
#define ART_LIBDEXFILE_DEX_DEX_FILE_VERIFIER_H_
#include <limits>
-#include <unordered_set>
#include "base/hash_map.h"
+#include "base/hash_set.h"
#include "base/safe_map.h"
#include "class_accessor.h"
#include "dex_file.h"
@@ -253,7 +253,7 @@ class DexFileVerifier {
std::string failure_reason_;
// Set of type ids for which there are ClassDef elements in the dex file.
- std::unordered_set<decltype(dex::ClassDef::class_idx_)> defined_classes_;
+ HashSet<decltype(dex::ClassDef::class_idx_)> defined_classes_;
// Cached string indices for "interesting" entries wrt/ method names. Will be populated by
// FindStringRangesForMethodNames (which is automatically called before verifying the