You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2022/07/03 12:34:00 UTC
[jira] [Created] (GROOVY-10676) ErrorReporter (used by FileSystemCompiler) can throw an IOOB exception on files with CR only
Paul King created GROOVY-10676:
----------------------------------
Summary: ErrorReporter (used by FileSystemCompiler) can throw an IOOB exception on files with CR only
Key: GROOVY-10676
URL: https://issues.apache.org/jira/browse/GROOVY-10676
Project: Groovy
Issue Type: Bug
Reporter: Paul King
Assignee: Paul King
Systems using CR only aren't common but Groovy successfully parses such files. This is true for the old and new parser.
For Groovy versions prior to 3, Antlr2 counted CR as a new line. Antlr4 doesn't. This makes a minor difference in the reported line/column numbers in error messages but otherwise isn't a huge issue.
For places where we use {{ErrorReporter}} however, the CR counting behavior causes a subsequent error.
Here is an example:
{code:java}
import org.codehaus.groovy.tools.ErrorReporter
try {
// error should be at column > 40, first line should be short
new GroovyShell().parse('/*\r * some comment\r */\r class class {}\r')
} catch(e) {
Writer data = new StringWriter()
new ErrorReporter(e, true).write(new PrintWriter(data))
}
{code}
Which throws this error:
{noformat}
java.lang.StringIndexOutOfBoundsException: begin 10, end 2, length 2
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
at java.base/java.lang.String.substring(String.java:1874)
at org.codehaus.groovy.control.SourceUnit.getSample(SourceUnit.java:288)
at org.codehaus.groovy.control.messages.SyntaxErrorMessage.write(SyntaxErrorMessage.java:54)
at org.codehaus.groovy.control.ErrorCollector.write(ErrorCollector.java:306)
{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)