[jira] [Closed] (JCI-53) Stack overflow on cross imports in commons-jci-janino
[ https://issues.apache.org/jira/browse/JCI-53?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Emmanuel Bourg closed JCI-53. - Stack overflow on cross imports in commons-jci-janino - Key: JCI-53 URL: https://issues.apache.org/jira/browse/JCI-53 Project: Commons JCI Issue Type: Bug Components: compiler janino Affects Versions: 1.0 Reporter: Edson Tirelli Assignee: Torsten Curdt Priority: Blocker Fix For: 1.1 A stack overflow occurs when trying to compile classes with cross references using commons-jci-janino, because an infinite recursion. The simple presence of cross reference import is enough to cause the problem. Example: the following classes will recreate the problem: {code} package test; import static test.Func2.func2; public class Func1 { public static boolean func1() throws Exception { return true; } } {code} {code} package test; import static test.Func1.func1; public class Func2 { public static boolean func2() throws Exception { return true; } } {code} The exception stack is: {code} java.lang.StackOverflowError at org.codehaus.janino.Parser.parseAndExpression(Parser.java) at org.codehaus.janino.Parser.parseExclusiveOrExpression(Parser.java) at org.codehaus.janino.Parser.parseInclusiveOrExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalAndExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalOrExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalExpression(Parser.java) at org.codehaus.janino.Parser.parseAssignmentExpression(Parser.java) at org.codehaus.janino.Parser.parseExpression(Parser.java) at org.codehaus.janino.Parser.parseReturnStatement(Parser.java) at org.codehaus.janino.Parser.parseStatement(Parser.java) at org.codehaus.janino.Parser.parseBlockStatement(Parser.java) at org.codehaus.janino.Parser.parseBlockStatements(Parser.java) at org.codehaus.janino.Parser.parseBlock(Parser.java) at org.codehaus.janino.Parser.parseMethodBody(Parser.java) at org.codehaus.janino.Parser.parseMethodDeclarationRest(Parser.java) at org.codehaus.janino.Parser.parseClassBodyDeclaration(Parser.java) at org.codehaus.janino.Parser.parseClassBody(Parser.java) at org.codehaus.janino.Parser.parseClassDeclarationRest(Parser.java) at org.codehaus.janino.Parser.parsePackageMemberTypeDeclaration(Parser.java) at org.codehaus.janino.Parser.parseCompilationUnit(Parser.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:90) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91)
[jira] Closed: (JCI-53) Stack overflow on cross imports in commons-jci-janino
[ https://issues.apache.org/jira/browse/JCI-53?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Torsten Curdt closed JCI-53. Resolution: Fixed Fix Version/s: (was: 1.1) 1.1RC1 The new janino release fixed the problem. Stack overflow on cross imports in commons-jci-janino - Key: JCI-53 URL: https://issues.apache.org/jira/browse/JCI-53 Project: Commons JCI Issue Type: Bug Components: compiler janino Affects Versions: 1.1 Reporter: Edson Tirelli Assignee: Torsten Curdt Priority: Blocker Fix For: 1.1RC1 A stack overflow occurs when trying to compile classes with cross references using commons-jci-janino, because an infinite recursion. The simple presence of cross reference import is enough to cause the problem. Example: the following classes will recreate the problem: package test; import static test.Func2.func2; public class Func1 { public static boolean func1() throws Exception { return true; } } package test; import static test.Func1.func1; public class Func2 { public static boolean func2() throws Exception { return true; } } The exception stack is: java.lang.StackOverflowError at org.codehaus.janino.Parser.parseAndExpression(Parser.java) at org.codehaus.janino.Parser.parseExclusiveOrExpression(Parser.java) at org.codehaus.janino.Parser.parseInclusiveOrExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalAndExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalOrExpression(Parser.java) at org.codehaus.janino.Parser.parseConditionalExpression(Parser.java) at org.codehaus.janino.Parser.parseAssignmentExpression(Parser.java) at org.codehaus.janino.Parser.parseExpression(Parser.java) at org.codehaus.janino.Parser.parseReturnStatement(Parser.java) at org.codehaus.janino.Parser.parseStatement(Parser.java) at org.codehaus.janino.Parser.parseBlockStatement(Parser.java) at org.codehaus.janino.Parser.parseBlockStatements(Parser.java) at org.codehaus.janino.Parser.parseBlock(Parser.java) at org.codehaus.janino.Parser.parseMethodBody(Parser.java) at org.codehaus.janino.Parser.parseMethodDeclarationRest(Parser.java) at org.codehaus.janino.Parser.parseClassBodyDeclaration(Parser.java) at org.codehaus.janino.Parser.parseClassBody(Parser.java) at org.codehaus.janino.Parser.parseClassDeclarationRest(Parser.java) at org.codehaus.janino.Parser.parsePackageMemberTypeDeclaration(Parser.java) at org.codehaus.janino.Parser.parseCompilationUnit(Parser.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:90) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91) at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java) at org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.init(UnitCompiler.java) at