diff options
| -rw-r--r-- | runtime/verifier/method_verifier.cc | 8 | ||||
| -rw-r--r-- | tools/fuzzer/class-verifier-corpus/b391844326.dex | bin | 0 -> 1240 bytes |
2 files changed, 4 insertions, 4 deletions
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 05fb9b39b6..1de1e6bce8 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -1593,6 +1593,10 @@ bool MethodVerifier<kVerifierDebug>::Verify() { return false; } + if (code_item_accessor_.InsnsSizeInCodeUnits() == 0u) { + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "code item has no opcode"; + return false; + } // Allocate and initialize an array to hold instruction data. insn_flags_.reset(allocator_.AllocArray<InstructionFlags>( code_item_accessor_.InsnsSizeInCodeUnits())); @@ -1619,10 +1623,6 @@ bool MethodVerifierImpl::ComputeWidthsAndCountOps() { // We can't assume the instruction is well formed, handle the case where calculating the size // goes past the end of the code item. const uint32_t insns_size = code_item_accessor_.InsnsSizeInCodeUnits(); - if (insns_size == 0u) { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "code item has no opcode"; - return false; - } const Instruction* inst = &code_item_accessor_.InstructionAt(0u); uint32_t dex_pc = 0u; while (dex_pc != insns_size) { diff --git a/tools/fuzzer/class-verifier-corpus/b391844326.dex b/tools/fuzzer/class-verifier-corpus/b391844326.dex Binary files differnew file mode 100644 index 0000000000..faf536139b --- /dev/null +++ b/tools/fuzzer/class-verifier-corpus/b391844326.dex |