From abb38071622cf6cc21bf69aa47df38ae41546e6c Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 30 Jun 2018 09:57:49 +0200 Subject: Ignore invalid decompiled variable indices --- .../enigma/analysis/SourceIndexMethodVisitor.java | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java index 51195a4d..cc2c331f 100644 --- a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java +++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java @@ -110,11 +110,15 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor { ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION); int variableOffset = this.methodEntry.getVariableOffset(ownerEntry); - LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, def.getSlot() - variableOffset, node.getName()); - Identifier identifier = node.getNameToken(); - // cache the argument entry and the identifier - identifierEntryCache.put(identifier.getName(), localVariableEntry); - index.addDeclaration(identifier, localVariableEntry); + int parameterIndex = def.getSlot() - variableOffset; + + if (parameterIndex >= 0) { + LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName()); + Identifier identifier = node.getNameToken(); + // cache the argument entry and the identifier + identifierEntryCache.put(identifier.getName(), localVariableEntry); + index.addDeclaration(identifier, localVariableEntry); + } return recurse(node, index); } @@ -181,10 +185,13 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor { VariableDefinition originalVariable = variable.getOriginalVariable(); if (originalVariable != null) { int variableOffset = methodEntry.getVariableOffset(ownerEntry); - LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, originalVariable.getSlot() - variableOffset, initializer.getName()); - identifierEntryCache.put(identifier.getName(), localVariableEntry); - addDeclarationToUnmatched(identifier.getName(), index); - index.addDeclaration(identifier, localVariableEntry); + int variableIndex = originalVariable.getSlot() - variableOffset; + if (variableIndex >= 0) { + LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName()); + identifierEntryCache.put(identifier.getName(), localVariableEntry); + addDeclarationToUnmatched(identifier.getName(), index); + index.addDeclaration(identifier, localVariableEntry); + } } } } -- cgit v1.2.3