diff src/luan/impl/LuanCompiler.java @ 1330:f41919741100

fix security
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 11 Feb 2019 01:38:55 -0700
parents ba4daf107e07
children 25746915a241
line wrap: on
line diff
--- a/src/luan/impl/LuanCompiler.java	Sun Feb 10 02:01:49 2019 -0700
+++ b/src/luan/impl/LuanCompiler.java	Mon Feb 11 01:38:55 2019 -0700
@@ -8,7 +8,7 @@
 import luan.LuanState;
 import luan.LuanException;
 import luan.LuanTable;
-import luan.LuanJavaOk;
+import luan.LuanClosure;
 import luan.modules.JavaLuan;
 import luan.modules.PackageLuan;
 
@@ -18,19 +18,12 @@
 
 	public static LuanFunction compile(String sourceText,String sourceName,LuanTable env) throws LuanException {
 		Class fnClass = env==null ? getClass(sourceText,sourceName) : getClass(sourceText,sourceName,env);
-		LuanJavaOk javaOk;
-		if( env == null ) {
-			javaOk = new LuanJavaOk();
-		} else {
-			javaOk = env.javaOk;
-			if( javaOk == null ) {
-				javaOk = new LuanJavaOk();
-				env.javaOk = javaOk;
-			}
-		}
-		Closure closure;
+		boolean javaOk = false;
+		if( env != null && env.closure != null )
+			javaOk = env.closure.javaOk;
+		LuanClosure closure;
 		try {
-			closure = (Closure)fnClass.getConstructor(LuanJavaOk.class).newInstance(javaOk);
+			closure = (LuanClosure)fnClass.getConstructor(Boolean.TYPE,String.class).newInstance(javaOk,sourceName);
 		} catch(NoSuchMethodException e) {
 			throw new RuntimeException(e);
 		} catch(InstantiationException e) {
@@ -42,7 +35,10 @@
 		}
 		closure.upValues[0].o = JavaLuan.javaFn;
 		closure.upValues[1].o = PackageLuan.requireFn;
-		if( env != null )  closure.upValues[2].o = env;
+		if( env != null ) {
+			closure.upValues[2].o = env;
+			env.closure = closure;
+		}
 		return closure;
 	}