From 78314beef26eedde6dee4a3d39127f7aef2a12e6 Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Sat, 20 Jun 2009 20:13:10 +0000 Subject: [PATCH] - Fixed an issue with debug info decoding, when it encountered an "end local" instruction for a register/local that hadn't been declared previously by a .local directive. This assumably happens when "ending" a parameter, in order to reuse that register for something else git-svn-id: https://smali.googlecode.com/svn/trunk@176 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../java/org/jf/dexlib/util/DebugInfoDecoder.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/util/DebugInfoDecoder.java b/dexlib/src/main/java/org/jf/dexlib/util/DebugInfoDecoder.java index e2b009e4..aad56a99 100644 --- a/dexlib/src/main/java/org/jf/dexlib/util/DebugInfoDecoder.java +++ b/dexlib/src/main/java/org/jf/dexlib/util/DebugInfoDecoder.java @@ -79,13 +79,21 @@ public class DebugInfoDecoder { case 0x05: { EndLocal inst = (EndLocal)debugInst; - delegate.endLocal(address, locals[inst.getRegisterNumber()]); + Local local = locals[inst.getRegisterNumber()]; + if (local == null) { + local = new Local(inst.getRegisterNumber(), null, null, null); + } + delegate.endLocal(address, local); break; } case 0x06: { RestartLocal inst = (RestartLocal)debugInst; - delegate.restartLocal(address, locals[inst.getRegisterNumber()]); + Local local = locals[inst.getRegisterNumber()]; + if (local == null) { + local = new Local(inst.getRegisterNumber(), null, null, null); + } + delegate.restartLocal(address, local); break; } case 0x07: