Mercurial Hosting > luan
diff 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 |
line wrap: on
line diff
--- a/src/luan/LuanState.java Sun Feb 10 02:01:49 2019 -0700 +++ b/src/luan/LuanState.java Mon Feb 11 01:38:55 2019 -0700 @@ -20,7 +20,7 @@ public final class LuanState implements LuanCloneable { private static final Logger logger = LoggerFactory.getLogger(LuanState.class); - public LuanJavaOk javaOk; + private final List<LuanClosure> stack = new ArrayList<LuanClosure>(); private Map registry; public boolean isLocked = false; @@ -30,7 +30,6 @@ public OnClose onClose; public LuanState() { - javaOk = new LuanJavaOk(); registry = new HashMap(); } @@ -43,11 +42,27 @@ @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { LuanState clone = (LuanState)dc; clone.registry = cloner.clone(registry); - clone.javaOk = (LuanJavaOk)cloner.clone(javaOk); if( cloner.type == LuanCloner.Type.INCREMENTAL ) isLocked = true; } + public LuanClosure peek() { + return peek(1); + } + + public LuanClosure peek(int i) { + int n = stack.size(); + return n < i ? null : stack.get(n-i); + } + + void push(LuanClosure closure) { + stack.add(closure); + } + + void pop() { + stack.remove(stack.size()-1); + } + public Map registry() { return registry; } @@ -84,7 +99,7 @@ LuanTable tbl = (LuanTable)obj; return tbl.get(key); } - if( obj != null && javaOk.ok ) + if( obj != null && peek().javaOk ) return JavaLuan.__index(this,obj,key); throw new LuanException("attempt to index a " + Luan.type(obj) + " value" ); }