huclons / java-syntax-highlighter

Automatically exported from code.google.com/p/java-syntax-highlighter
0 stars 0 forks source link

StackOverflowError when parsing some scala files. #2

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
I get a StackOverflowError caused by an unmatched single quote when parsing 
scala files with a comment style such as: /* `123' */

This can be reproduced with:

    String s = "'"; for(int x = 0; x < 2000; x++) s += '\n';
    new SyntaxHighlighterParser(new BrushScala()).parse(null, s);

Which gives the same error as:

    Pattern multiLineSingleQuotedString = Pattern.compile("'((\\\\.)|([^\\\\']))*'", Pattern.DOTALL);
    String s = "'"; for(int x = 0; x < 2000; x++) s += '1';
    multiLineSingleQuotedString.matcher(s).find();

Exception in thread "main" java.lang.StackOverflowError
    at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3714)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
    at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
    at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
    ...
    at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)

Running on OpenJDK 1.7.0_40 and ideone https://ideone.com/AnAJdf

This seems to be fixed by using a possessive quantifier in RegExpRule.java:

    public static final Pattern multiLineSingleQuotedString = Pattern.compile("'((\\\\.)|([^\\\\']))*+'", Pattern.DOTALL);

Some of the other rules here could have the same problem.

Original issue reported on code.google.com by d22...@gmail.com on 20 May 2014 at 12:56