Open ulises opened 5 years ago
Consider the following test:
{ interceptedEval("'blah'.toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" + ".toString().toString().toString().toString().toString().toString()" ) }``` This will result in a stack overflow here https://github.com/jenkinsci/groovy-sandbox/blob/master/src/main/java/org/kohsuke/groovy/sandbox/SandboxTransformer.java#L396 since all the left hand side expression needs to be resolved before you can evaluate the last `toString()`. The solution is to unroll the recursion, however this is easier said than done.
Consider the following test: