diff --git a/src/main/java/com/dashjoin/jsonata/Jsonata.java b/src/main/java/com/dashjoin/jsonata/Jsonata.java index d60bf19..047affb 100644 --- a/src/main/java/com/dashjoin/jsonata/Jsonata.java +++ b/src/main/java/com/dashjoin/jsonata/Jsonata.java @@ -89,12 +89,11 @@ public void bind(String name, JFunction function) { public void bind(String name, Fn2 lambda) { bind(name, (Object)lambda); } public Object lookup(String name) { - // Important: if we have a null value, - // return it - if (bindings.containsKey(name)) - return bindings.get(name); - if (parent!=null) - return parent.lookup(name); + // Iterative walk of the parent scope chain to avoid StackOverflowError + // on JVMs with small thread stacks (e.g. Windows workers). + for (Frame f = this; f != null; f = f.parent) { + if (f.bindings.containsKey(name)) return f.bindings.get(name); + } return null; }