-
Bug
-
Resolution: Unresolved
-
P4
-
8, 9, 10, 11
-
Cause Known
-
generic
-
generic
A DESCRIPTION OF THE PROBLEM :
java.util.regex.Matcher hung for ever while matching a regex in huge string, it remains in following stacktrace forever.
"main" #1 prio=5 os_prio=31 tid=0x00007f8e12002000 nid=0x2603 runnable [0x0000700006a49000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Curly.match(Pattern.java:4234)
at java.util.regex.Pattern$Slice.match(Pattern.java:3972)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$Start.match(Pattern.java:3461)
at java.util.regex.Matcher.search(Matcher.java:1248)
at java.util.regex.Matcher.find(Matcher.java:664)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
steps to reproduce:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
private static final String ALPHA_NUMERIC_STRING = "ABC DEFGH IJKLM NOPQR STUVWXY Z 01 234 567 89";
public static void main(String[] args) {
String dummyVar = "";
Pattern p = Pattern.compile("HUNG.* .* PHONE|PRICE.*");
Matcher m = p.matcher(randomAlphaNumeric(403403));
System.out.println("looking for pattern : "+p);
boolean match = m.find(0);
System.out.println("done : match found : "+match);
}
public static String randomAlphaNumeric(int count) {
StringBuilder builder = new StringBuilder();
while (count-- != 0) {
int character = (int)(Math.random()*ALPHA_NUMERIC_STRING.length());
builder.append(ALPHA_NUMERIC_STRING.charAt(character));
if(count % 1000 == 0){
builder.append("HUNG");
}
}
return builder.toString();
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
it should return the boolean result whether string has a match for given pattern
ACTUAL -
it never comes back and hung forever.
FREQUENCY : always
java.util.regex.Matcher hung for ever while matching a regex in huge string, it remains in following stacktrace forever.
"main" #1 prio=5 os_prio=31 tid=0x00007f8e12002000 nid=0x2603 runnable [0x0000700006a49000]
java.lang.Thread.State: RUNNABLE
at java.util.regex.Pattern$Curly.match(Pattern.java:4234)
at java.util.regex.Pattern$Slice.match(Pattern.java:3972)
at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
at java.util.regex.Pattern$Start.match(Pattern.java:3461)
at java.util.regex.Matcher.search(Matcher.java:1248)
at java.util.regex.Matcher.find(Matcher.java:664)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
steps to reproduce:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest {
private static final String ALPHA_NUMERIC_STRING = "ABC DEFGH IJKLM NOPQR STUVWXY Z 01 234 567 89";
public static void main(String[] args) {
String dummyVar = "";
Pattern p = Pattern.compile("HUNG.* .* PHONE|PRICE.*");
Matcher m = p.matcher(randomAlphaNumeric(403403));
System.out.println("looking for pattern : "+p);
boolean match = m.find(0);
System.out.println("done : match found : "+match);
}
public static String randomAlphaNumeric(int count) {
StringBuilder builder = new StringBuilder();
while (count-- != 0) {
int character = (int)(Math.random()*ALPHA_NUMERIC_STRING.length());
builder.append(ALPHA_NUMERIC_STRING.charAt(character));
if(count % 1000 == 0){
builder.append("HUNG");
}
}
return builder.toString();
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
it should return the boolean result whether string has a match for given pattern
ACTUAL -
it never comes back and hung forever.
FREQUENCY : always