JDK-6958156 : String regex bug
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.util.regex
  • Affected Version: 6u10
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_7
  • CPU: x86
  • Submitted: 2010-06-03
  • Updated: 2012-03-20
  • Resolved: 2011-06-06
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
window and linux

EXTRA RELEVANT SYSTEM CONFIGURATION :
Linux minisystem 2.6.16.54-0.2.3

A DESCRIPTION OF THE PROBLEM :
public static void main(String[] args) throws Throwable {
        StringBuilder sb = new StringBuilder(10240);
        sb.append(22220001);
        int count = 1000;
        for(int i = 1; i < count ; i++){
            sb.append(',').append(22220001 + i);
        }
        System.out.println(sb.toString().matches("\\d+(,\\d+)*"));
    }

print:

Exception in thread "main" java.lang.StackOverflowError
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
     ..........



if count = 500   print:     true

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
public static void main(String[] args) throws Throwable {
        StringBuilder sb = new StringBuilder(10240);
        sb.append(22220001);
        for(int i = 1; i < 1000; i++){
            sb.append(',').append(22220001 + i);
        }
        System.out.println(sb.toString().matches("\\d+(,\\d+)*"));
    }

out :


Exception in thread "main" java.lang.StackOverflowError
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
print:   true
ACTUAL -
Exception in thread "main" java.lang.StackOverflowError
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)
        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$Curly.match0(Pattern.java:3782)
        at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
        at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3366)

REPRODUCIBILITY :
This bug can be reproduced always.

Comments
EVALUATION "\\d+(,\\d+)*" is a variant of #6337993
06-06-2011