summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar gegy10002018-06-30 09:57:49 +0200
committerGravatar gegy10002018-06-30 09:57:49 +0200
commitabb38071622cf6cc21bf69aa47df38ae41546e6c (patch)
treeef1943490dffe69f572ac9fbb386308c66a08447 /src
parentFix stackoverflow on rebuilding method names (diff)
downloadenigma-abb38071622cf6cc21bf69aa47df38ae41546e6c.tar.gz
enigma-abb38071622cf6cc21bf69aa47df38ae41546e6c.tar.xz
enigma-abb38071622cf6cc21bf69aa47df38ae41546e6c.zip
Ignore invalid decompiled variable indices
Diffstat (limited to 'src')
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java25
1 files changed, 16 insertions, 9 deletions
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 {
110 ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION); 110 ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION);
111 111
112 int variableOffset = this.methodEntry.getVariableOffset(ownerEntry); 112 int variableOffset = this.methodEntry.getVariableOffset(ownerEntry);
113 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, def.getSlot() - variableOffset, node.getName()); 113 int parameterIndex = def.getSlot() - variableOffset;
114 Identifier identifier = node.getNameToken(); 114
115 // cache the argument entry and the identifier 115 if (parameterIndex >= 0) {
116 identifierEntryCache.put(identifier.getName(), localVariableEntry); 116 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName());
117 index.addDeclaration(identifier, localVariableEntry); 117 Identifier identifier = node.getNameToken();
118 // cache the argument entry and the identifier
119 identifierEntryCache.put(identifier.getName(), localVariableEntry);
120 index.addDeclaration(identifier, localVariableEntry);
121 }
118 122
119 return recurse(node, index); 123 return recurse(node, index);
120 } 124 }
@@ -181,10 +185,13 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
181 VariableDefinition originalVariable = variable.getOriginalVariable(); 185 VariableDefinition originalVariable = variable.getOriginalVariable();
182 if (originalVariable != null) { 186 if (originalVariable != null) {
183 int variableOffset = methodEntry.getVariableOffset(ownerEntry); 187 int variableOffset = methodEntry.getVariableOffset(ownerEntry);
184 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, originalVariable.getSlot() - variableOffset, initializer.getName()); 188 int variableIndex = originalVariable.getSlot() - variableOffset;
185 identifierEntryCache.put(identifier.getName(), localVariableEntry); 189 if (variableIndex >= 0) {
186 addDeclarationToUnmatched(identifier.getName(), index); 190 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName());
187 index.addDeclaration(identifier, localVariableEntry); 191 identifierEntryCache.put(identifier.getName(), localVariableEntry);
192 addDeclarationToUnmatched(identifier.getName(), index);
193 index.addDeclaration(identifier, localVariableEntry);
194 }
188 } 195 }
189 } 196 }
190 } 197 }