mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-12 21:18:08 +00:00
do not use line info in block (obfuscated SWFs break it)
Issue #961 Final process fix
This commit is contained in:
@@ -537,7 +537,7 @@ public class Graph {
|
||||
if (exprLine > 0) {
|
||||
List<GraphTargetItem> forFirstCommands = new ArrayList<>();
|
||||
for (int j = i - 1; j >= 0; j--) {
|
||||
if (list.get(j).getLine() == exprLine) {
|
||||
if (list.get(j).getLine() == exprLine && !(list.get(j) instanceof LoopItem /*to avoid recursion and StackOverflow*/)) {
|
||||
forFirstCommands.add(0, list.get(j));
|
||||
removeFromList.add(j);
|
||||
} else {
|
||||
@@ -571,6 +571,11 @@ public class Graph {
|
||||
}
|
||||
}
|
||||
if (!forFirstCommands.isEmpty() || !forFinalCommands.isEmpty()) {
|
||||
//Do not allow more than 2 first/final commands, since it can be obfuscated
|
||||
if (forFirstCommands.size() > 2 || forFinalCommands.size() > 2) {
|
||||
removeFromList.clear();
|
||||
whi.commands.addAll(forFinalCommands); //put it back
|
||||
}
|
||||
if (whi.commands.isEmpty() && forFirstCommands.isEmpty()) {
|
||||
//it would be for(;expr;commands) {} which looks better as while(expr){commands}
|
||||
whi.commands.addAll(forFinalCommands); //put it back
|
||||
|
||||
@@ -347,13 +347,17 @@ public abstract class GraphTargetItem implements Serializable, Cloneable {
|
||||
}
|
||||
|
||||
public GraphTextWriter appendBlock(GraphTargetItem prevLineItem, GraphTextWriter writer, LocalData localData, List<GraphTargetItem> commands) throws InterruptedException {
|
||||
|
||||
//This may be useful in the future, but we must handle obfuscated SWFs where there is only one debugline instruction on the beggining.
|
||||
final boolean useLineInfo = false;
|
||||
|
||||
int prevLine = prevLineItem == null ? 0 : prevLineItem.getLine();
|
||||
writer.startBlock();
|
||||
boolean first = true;
|
||||
for (GraphTargetItem ti : commands) {
|
||||
if (!ti.isEmpty()) {
|
||||
//Use stored line information if available to place commands on same line
|
||||
if (!first && (ti.getLine() < 1 || prevLine < 1 || (prevLine >= 1 && prevLine != ti.getLine()))) {
|
||||
if (!first && (!useLineInfo || (ti.getLine() < 1 || prevLine < 1 || (prevLine >= 1 && prevLine != ti.getLine())))) {
|
||||
writer.newLine();
|
||||
}
|
||||
prevLine = ti.getLine();
|
||||
|
||||
Reference in New Issue
Block a user