From b6ce091ae3b99b743351d1bb492d31466e6af42b Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Wed, 9 Dec 2009 09:56:13 +0000 Subject: [PATCH] fix an issue reading the string index for indexes >16bits, for the const-string/jumbo opcode git-svn-id: https://smali.googlecode.com/svn/trunk@495 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../main/java/org/jf/dexlib/Code/Format/Instruction31c.java | 4 ++++ .../java/org/jf/dexlib/Code/InstructionWithReference.java | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Format/Instruction31c.java b/dexlib/src/main/java/org/jf/dexlib/Code/Format/Instruction31c.java index 4213cea8..5eccff74 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Format/Instruction31c.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Format/Instruction31c.java @@ -54,6 +54,10 @@ public class Instruction31c extends InstructionWithReference implements SingleRe super(dexFile, opcode, buffer, bufferIndex); } + protected int getReferencedItemIndex() { + return NumberUtils.decodeInt(buffer, bufferIndex + 2); + } + public Format getFormat() { return Format.Format31c; } diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/InstructionWithReference.java b/dexlib/src/main/java/org/jf/dexlib/Code/InstructionWithReference.java index 891411f2..63652a9e 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/InstructionWithReference.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/InstructionWithReference.java @@ -43,10 +43,14 @@ public abstract class InstructionWithReference extends Instruction { protected InstructionWithReference(DexFile dexFile, Opcode opcode, byte[] buffer, int bufferIndex) { super(opcode, buffer, bufferIndex); - int itemIndex = NumberUtils.decodeUnsignedShort(buffer, bufferIndex + 2); + int itemIndex = getReferencedItemIndex(); lookupReferencedItem(dexFile, opcode, itemIndex); } + protected int getReferencedItemIndex() { + return NumberUtils.decodeUnsignedShort(buffer, bufferIndex + 2); + } + public Item getReferencedItem() { return referencedItem; }