Details
Description
When we run the following,
new JsonBuilder('<a a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\" a=\\"\\"/>').toPrettyPrint()
we get a StackOverflowException
java.lang.StackOverflowError at java.lang.Character.codePointAt(Character.java:2335) at java.util.regex.Pattern$CharProperty.match(Pattern.java:3344) at java.util.regex.Pattern$Curly.match0(Pattern.java:3760) at java.util.regex.Pattern$Curly.match(Pattern.java:3744) at java.util.regex.Pattern$Branch.match(Pattern.java:4114) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168) at java.util.regex.Pattern$Loop.match(Pattern.java:4295) at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227) at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078) at java.util.regex.Pattern$Curly.match0(Pattern.java:3782) at java.util.regex.Pattern$Curly.match(Pattern.java:3744) at java.util.regex.Pattern$Branch.match(Pattern.java:4114) at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168) at java.util.regex.Pattern$Loop.match(Pattern.java:4295) ...
We have made a basic change to fix the problem as an override/temporary solution as follows...
JsonTokenType.STRING.validator = Pattern.compile('"(?>[^"\\\\]+|\\\\["\\\\bfnrt\\/]|\\\\u[0-9a-fA-F]{4})*"', Pattern.DOTALL)
The main change is the addition of ?> and the change from * to +.