diff options
| author | 2018-06-30 09:57:49 +0200 | |
|---|---|---|
| committer | 2018-06-30 09:57:49 +0200 | |
| commit | abb38071622cf6cc21bf69aa47df38ae41546e6c (patch) | |
| tree | ef1943490dffe69f572ac9fbb386308c66a08447 /src | |
| parent | Fix stackoverflow on rebuilding method names (diff) | |
| download | enigma-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.java | 25 |
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 | } |