diff options
| author | 2022-05-02 12:22:33 -0700 | |
|---|---|---|
| committer | 2022-05-10 15:24:24 +0000 | |
| commit | dd6f7c69627e6d24c2cc026654f5ca118224f6db (patch) | |
| tree | 4959fc8ff0466a1e60154256b3ed20d51fad023f /runtime/indirect_reference_table.cc | |
| parent | 45d0881f7444307955b51db5be88c5f890647c5e (diff) | |
Avoid PushLocalFrame(0) CHECK failure
This makes EnsureLocalCapacity(0) and PushLocalFrame(0) correct,
which we believe is the spec intent.
Also simplify test for ridiculously large argument.
Bug: 230854166
Test: Build and boot AOSP
Change-Id: Id4bb3b6bb2f52ff0c3e78f13326405dac06de730
Merged-In: Id4bb3b6bb2f52ff0c3e78f13326405dac06de730
(cherry picked from commit 6e9408c407a1c8e195b065c094a8e15f85aef103)
Diffstat (limited to 'runtime/indirect_reference_table.cc')
| -rw-r--r-- | runtime/indirect_reference_table.cc | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/runtime/indirect_reference_table.cc b/runtime/indirect_reference_table.cc index fbe678bea2..ebf382f2ec 100644 --- a/runtime/indirect_reference_table.cc +++ b/runtime/indirect_reference_table.cc @@ -561,8 +561,14 @@ void IndirectReferenceTable::SetSegmentState(IRTSegmentState new_state) { } bool IndirectReferenceTable::EnsureFreeCapacity(size_t free_capacity, std::string* error_msg) { + DCHECK_GE(free_capacity, static_cast<size_t>(1)); + if (free_capacity > kMaxTableSizeInBytes) { + // Arithmetic might even overflow. + *error_msg = "Requested table size implausibly large"; + return false; + } size_t top_index = segment_state_.top_index; - if (top_index < max_entries_ && top_index + free_capacity <= max_entries_) { + if (top_index + free_capacity <= max_entries_) { return true; } @@ -573,13 +579,6 @@ bool IndirectReferenceTable::EnsureFreeCapacity(size_t free_capacity, std::strin } // Try to increase the table size. - - // Would this overflow? - if (std::numeric_limits<size_t>::max() - free_capacity < top_index) { - *error_msg = "Cannot resize table, overflow."; - return false; - } - if (!Resize(top_index + free_capacity, error_msg)) { LOG(WARNING) << "JNI ERROR: Unable to reserve space in EnsureFreeCapacity (" << free_capacity << "): " << std::endl |