comparison src/luan/impl/LuanCompiler.java @ 1133:ba4daf107e07

fix security bug
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 17 Jan 2018 20:59:42 -0700
parents 1a68fc55a80c
children f41919741100
comparison
equal deleted inserted replaced
1132:b70102bab110 1133:ba4daf107e07
6 import java.util.HashMap; 6 import java.util.HashMap;
7 import luan.LuanFunction; 7 import luan.LuanFunction;
8 import luan.LuanState; 8 import luan.LuanState;
9 import luan.LuanException; 9 import luan.LuanException;
10 import luan.LuanTable; 10 import luan.LuanTable;
11 import luan.LuanJava; 11 import luan.LuanJavaOk;
12 import luan.modules.JavaLuan; 12 import luan.modules.JavaLuan;
13 import luan.modules.PackageLuan; 13 import luan.modules.PackageLuan;
14 14
15 15
16 public final class LuanCompiler { 16 public final class LuanCompiler {
17 private static final Map<String,WeakReference<Class>> map = new HashMap<String,WeakReference<Class>>(); 17 private static final Map<String,WeakReference<Class>> map = new HashMap<String,WeakReference<Class>>();
18 18
19 public static LuanFunction compile(String sourceText,String sourceName,LuanTable env) throws LuanException { 19 public static LuanFunction compile(String sourceText,String sourceName,LuanTable env) throws LuanException {
20 Class fnClass = env==null ? getClass(sourceText,sourceName) : getClass(sourceText,sourceName,env); 20 Class fnClass = env==null ? getClass(sourceText,sourceName) : getClass(sourceText,sourceName,env);
21 LuanJava java; 21 LuanJavaOk javaOk;
22 if( env == null ) { 22 if( env == null ) {
23 java = new LuanJava(); 23 javaOk = new LuanJavaOk();
24 } else { 24 } else {
25 java = env.java; 25 javaOk = env.javaOk;
26 if( java == null ) { 26 if( javaOk == null ) {
27 java = new LuanJava(); 27 javaOk = new LuanJavaOk();
28 env.java = java; 28 env.javaOk = javaOk;
29 } 29 }
30 } 30 }
31 Closure closure; 31 Closure closure;
32 try { 32 try {
33 closure = (Closure)fnClass.getConstructor(LuanJava.class).newInstance(java); 33 closure = (Closure)fnClass.getConstructor(LuanJavaOk.class).newInstance(javaOk);
34 } catch(NoSuchMethodException e) { 34 } catch(NoSuchMethodException e) {
35 throw new RuntimeException(e); 35 throw new RuntimeException(e);
36 } catch(InstantiationException e) { 36 } catch(InstantiationException e) {
37 throw new RuntimeException(e); 37 throw new RuntimeException(e);
38 } catch(IllegalAccessException e) { 38 } catch(IllegalAccessException e) {