comparison src/luan/LuanState.java @ 1330:f41919741100

fix security
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 11 Feb 2019 01:38:55 -0700
parents 503bde9a7c80
children
comparison
equal deleted inserted replaced
1329:5a39b006acd1 1330:f41919741100
18 18
19 19
20 public final class LuanState implements LuanCloneable { 20 public final class LuanState implements LuanCloneable {
21 private static final Logger logger = LoggerFactory.getLogger(LuanState.class); 21 private static final Logger logger = LoggerFactory.getLogger(LuanState.class);
22 22
23 public LuanJavaOk javaOk; 23 private final List<LuanClosure> stack = new ArrayList<LuanClosure>();
24 private Map registry; 24 private Map registry;
25 public boolean isLocked = false; 25 public boolean isLocked = false;
26 26
27 public interface OnClose extends Closeable { 27 public interface OnClose extends Closeable {
28 public void onClose(Closeable c); 28 public void onClose(Closeable c);
29 } 29 }
30 public OnClose onClose; 30 public OnClose onClose;
31 31
32 public LuanState() { 32 public LuanState() {
33 javaOk = new LuanJavaOk();
34 registry = new HashMap(); 33 registry = new HashMap();
35 } 34 }
36 35
37 private LuanState(LuanState luan) {} 36 private LuanState(LuanState luan) {}
38 37
41 } 40 }
42 41
43 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { 42 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) {
44 LuanState clone = (LuanState)dc; 43 LuanState clone = (LuanState)dc;
45 clone.registry = cloner.clone(registry); 44 clone.registry = cloner.clone(registry);
46 clone.javaOk = (LuanJavaOk)cloner.clone(javaOk);
47 if( cloner.type == LuanCloner.Type.INCREMENTAL ) 45 if( cloner.type == LuanCloner.Type.INCREMENTAL )
48 isLocked = true; 46 isLocked = true;
47 }
48
49 public LuanClosure peek() {
50 return peek(1);
51 }
52
53 public LuanClosure peek(int i) {
54 int n = stack.size();
55 return n < i ? null : stack.get(n-i);
56 }
57
58 void push(LuanClosure closure) {
59 stack.add(closure);
60 }
61
62 void pop() {
63 stack.remove(stack.size()-1);
49 } 64 }
50 65
51 public Map registry() { 66 public Map registry() {
52 return registry; 67 return registry;
53 } 68 }
82 public Object index(Object obj,Object key) throws LuanException { 97 public Object index(Object obj,Object key) throws LuanException {
83 if( obj instanceof LuanTable ) { 98 if( obj instanceof LuanTable ) {
84 LuanTable tbl = (LuanTable)obj; 99 LuanTable tbl = (LuanTable)obj;
85 return tbl.get(key); 100 return tbl.get(key);
86 } 101 }
87 if( obj != null && javaOk.ok ) 102 if( obj != null && peek().javaOk )
88 return JavaLuan.__index(this,obj,key); 103 return JavaLuan.__index(this,obj,key);
89 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" ); 104 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" );
90 } 105 }
91 106
92 /* 107 /*