Skip to content

Commit 67aaea3

Browse files
committed
Avoid recursive tuple metadata overflow
1 parent fd7d4b4 commit 67aaea3

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/validation/NamePreservation.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
import de.peeeq.wurstscript.types.WurstTypeTuple;
1010

1111
import java.util.ArrayList;
12+
import java.util.Collections;
13+
import java.util.IdentityHashMap;
1214
import java.util.LinkedHashMap;
1315
import java.util.List;
1416
import java.util.Map;
17+
import java.util.Set;
1518

1619
/** Metadata for names which are part of the Warcraft III-facing API. */
1720
public final class NamePreservation {
@@ -65,7 +68,8 @@ public void visit(GlobalVarDef variable) {
6568
super.visit(variable);
6669
String name = runtimeName(variable);
6770
result.add(name, variable);
68-
addTupleComponentNames(result, name, variable.attrTyp(), variable);
71+
addTupleComponentNames(result, name, variable.attrTyp(), variable,
72+
Collections.newSetFromMap(new IdentityHashMap<>()));
6973
}
7074
});
7175
return result;
@@ -87,17 +91,20 @@ public void visit(GlobalVarDef variable) {
8791
}
8892

8993
private static void addTupleComponentNames(RuntimeNameIndex index, String name, WurstType type,
90-
GlobalVarDef variable) {
94+
GlobalVarDef variable, Set<TupleDef> expandedTuples) {
9195
if (type instanceof WurstTypeArray array) {
9296
type = array.getBaseType();
9397
}
9498
if (!(type instanceof WurstTypeTuple tuple)) {
9599
return;
96100
}
101+
if (!expandedTuples.add(tuple.getTupleDef())) {
102+
return;
103+
}
97104
for (WParameter parameter : tuple.getTupleDef().getParameters()) {
98105
String componentName = name + "_" + parameter.getName();
99106
index.add(componentName, variable);
100-
addTupleComponentNames(index, componentName, parameter.attrTyp(), variable);
107+
addTupleComponentNames(index, componentName, parameter.attrTyp(), variable, expandedTuples);
101108
}
102109
}
103110

0 commit comments

Comments
 (0)