Skip to content

Commit fa07826

Browse files
committed
prevent scripts referring to itself by simple class name
1 parent ca53e76 commit fa07826

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/main/java/com/cleanroommc/groovyscript/core/mixin/groovy/ResolveVisitorMixin.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package com.cleanroommc.groovyscript.core.mixin.groovy;
22

33
import com.cleanroommc.groovyscript.sandbox.transformer.AsmDecompileHelper;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
5+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
46
import org.codehaus.groovy.ast.*;
57
import org.codehaus.groovy.classgen.VariableScopeVisitor;
68
import org.codehaus.groovy.control.ResolveVisitor;
79
import org.codehaus.groovy.control.SourceUnit;
810
import org.spongepowered.asm.mixin.Mixin;
911
import org.spongepowered.asm.mixin.Overwrite;
1012
import org.spongepowered.asm.mixin.Shadow;
13+
import org.spongepowered.asm.mixin.injection.At;
1114

1215
import java.lang.reflect.Modifier;
1316
import java.util.HashMap;
@@ -156,4 +159,13 @@ public void visitClass(ClassNode node) {
156159
}
157160
currentClass = oldNode;
158161
}
162+
163+
@WrapOperation(method = "transformVariableExpression", at = @At(value = "INVOKE", target = "Lorg/codehaus/groovy/control/ResolveVisitor;resolve(Lorg/codehaus/groovy/ast/ClassNode;)Z"))
164+
public boolean transformVariableExpression(ResolveVisitor instance, ClassNode type, Operation<Boolean> original) {
165+
if (currentClass.getNameWithoutPackage().equals(type.getName())) {
166+
// if the variable name is just the simple class name of the class its inside, assume it's not referring to itself
167+
return false;
168+
}
169+
return original.call(instance, type);
170+
}
159171
}

0 commit comments

Comments
 (0)