Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stack overflow on long chained method calls #51

Open
ulises opened this issue Nov 7, 2018 · 0 comments
Open

Stack overflow on long chained method calls #51

ulises opened this issue Nov 7, 2018 · 0 comments

Comments

@ulises
Copy link

ulises commented Nov 7, 2018

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant