Mercurial Hosting > luan
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; }