The GitHub Actions job "End to End" on 
grails-core.git/chore/cleanup-AbstractCriteriaBuilder has succeeded.
Run started by GitHub user borinquenkid (triggered by borinquenkid).

Head commit for run:
a8f61b81a297ca8ebfa3c0b1c55aac0e80948e31 / Walter Duque de Estrada 
<[email protected]>
Fix infinite recursion in CriteriaBuilder.scroll() on malformed calls

scroll(Closure c) unconditionally re-entered invokeMethod(SCROLL_CALL, new 
Object[]{c})
to reuse the shared criteria-construction logic. When scroll() is called with 
the wrong
arg count/type (e.g. bare scroll(), or a call whose argument gets null-coerced 
by Groovy's
meta-method matching), isCriteriaConstructionMethod() correctly rejects it, but 
invokeMethod
then falls through to its getMetaClass() meta-method lookup, which is willing 
to match
scroll(Closure) with a null argument and invoke it - re-entering scroll() with 
the same null
argument forever, and StackOverflowing.

Extracted the shared criteria-construction logic (evaluate the closure, run the 
query,
reset state) into a new executeCriteriaConstruction() method, and changed 
scroll() to call
it directly instead of bouncing back through the dynamic dispatch in 
invokeMethod. This
closes the recursion path entirely: a malformed scroll() call now just runs the 
query with
no criteria applied, matching how an empty/null closure already behaves 
everywhere else in
this class, instead of crashing.

Found and root-caused while extending the SCROLL_CALL branch's test coverage 
for PR #16140;
CriteriaBuilder.java is already one of that PR's changed files even though this 
particular
method wasn't touched by its diff.

Co-Authored-By: Claude Sonnet 5 <[email protected]>

Report URL: https://github.com/apache/grails-core/actions/runs/31652484745

With regards,
GitHub Actions via GitBox

Reply via email to