This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new 7fcc09f GROOVY-10424: SC: prevent infinite recursion for
`isExtended(ClassNode)`
7fcc09f is described below
commit 7fcc09f2fc6385b7dab08f06ddef8e10e0482641
Author: Eric Milles <[email protected]>
AuthorDate: Sat Dec 18 10:56:39 2021 -0600
GROOVY-10424: SC: prevent infinite recursion for `isExtended(ClassNode)`
Conflicts:
src/main/java/org/codehaus/groovy/transform/sc/transformers/BooleanExpressionTransformer.java
---
.../transformers/BooleanExpressionTransformer.java | 10 +++---
src/test/groovy/transform/stc/BugsSTCTest.groovy | 36 ++++++++++++++++++++++
2 files changed, 40 insertions(+), 6 deletions(-)
diff --git
a/src/main/java/org/codehaus/groovy/transform/sc/transformers/BooleanExpressionTransformer.java
b/src/main/java/org/codehaus/groovy/transform/sc/transformers/BooleanExpressionTransformer.java
index 575c532..f15b75c 100644
---
a/src/main/java/org/codehaus/groovy/transform/sc/transformers/BooleanExpressionTransformer.java
+++
b/src/main/java/org/codehaus/groovy/transform/sc/transformers/BooleanExpressionTransformer.java
@@ -71,14 +71,12 @@ public class BooleanExpressionTransformer {
}
return transformer.superTransform(booleanExpression);
}
-
+
private static boolean isExtended(ClassNode owner,
Iterator<InnerClassNode> classes) {
while (classes.hasNext()) {
- InnerClassNode next = classes.next();
+ InnerClassNode next = classes.next();
if (next!=owner && next.isDerivedFrom(owner)) return true;
- }
- if (owner.getInnerClasses().hasNext()) {
- return isExtended(owner, owner.getInnerClasses());
+ if (isExtended(owner,next.getInnerClasses())) return true;
}
return false;
}
@@ -180,4 +178,4 @@ public class BooleanExpressionTransformer {
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/test/groovy/transform/stc/BugsSTCTest.groovy
b/src/test/groovy/transform/stc/BugsSTCTest.groovy
index cfa8c19..bbd13bd 100644
--- a/src/test/groovy/transform/stc/BugsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/BugsSTCTest.groovy
@@ -1035,4 +1035,40 @@ Printer
assert obj.proper == 'value'
'''
}
+
+ // GROOVY-10424
+ void testPrivateInnerClassOptimizedBooleanExpr1() {
+ assertScript '''
+ class Outer {
+ private static class Inner {
+ private Inner() {} // triggers creation of Inner$1 in
StaticCompilationVisitor$addPrivateBridgeMethods
+ }
+ void test() {
+ def inner = new Inner()
+ if (inner) { // optimized boolean expression;
StackOverflowError
+ assert true
+ }
+ }
+ }
+ new Outer().test()
+ '''
+ }
+
+ // GROOVY-10424
+ void testPrivateInnerClassOptimizedBooleanExpr2() {
+ assertScript '''
+ class Outer {
+ private static class Inner {
+ static class Three {}
+ }
+ void test() {
+ def inner = new Inner()
+ if (inner) { // optimized boolean expression;
StackOverflowError
+ assert true
+ }
+ }
+ }
+ new Outer().test()
+ '''
+ }
}