diff options
Diffstat (limited to 'core')
| -rw-r--r-- | core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java | 2 | ||||
| -rw-r--r-- | core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java b/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java index 49992df26..7054d2272 100644 --- a/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java +++ b/core/src/main/java/com/google/zxing/client/result/EmailDoCoMoResultParser.java @@ -30,7 +30,7 @@ import java.util.regex.Pattern; public final class EmailDoCoMoResultParser extends AbstractDoCoMoResultParser { private static final String EMAIL_LOCAL = "[^:]+"; - private static final String EMAIL_DOMAIN = "([0-9a-zA-Z]+[0-9a-zA-Z\\-]+[0-9a-zA-Z]+\\.)+[a-zA-Z]{2,}"; + private static final String EMAIL_DOMAIN = "([0-9a-zA-Z]+(-+[0-9a-zA-Z]+)*\\.)+[a-zA-Z]{2,}"; private static final Pattern EMAIL = Pattern.compile("^" + EMAIL_LOCAL + "@" + EMAIL_DOMAIN + "$"); @Override diff --git a/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java b/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java index ea79c4272..d900d1ddc 100644 --- a/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java +++ b/core/src/test/java/com/google/zxing/client/result/EmailAddressParsedResultTestCase.java @@ -52,6 +52,17 @@ public final class EmailAddressParsedResultTestCase extends Assert { assertTrue(EmailDoCoMoResultParser.isBasicallyValidEmailAddress("建設省.aZ456@Ab-cd9Z.co")); } + // A long run of address characters that never completes a valid domain must be rejected + // quickly; the previous pattern backtracked super-linearly on such input. + @Test(timeout = 5000L) + public void testNoCatastrophicBacktracking() { + StringBuilder sb = new StringBuilder("x@"); + for (int i = 0; i < 5000; i++) { + sb.append('a'); + } + assertFalse(EmailDoCoMoResultParser.isBasicallyValidEmailAddress(sb.toString())); + } + @Test public void testEmailAddress() { doTest("srowen@example.org", "srowen@example.org", null, null); |
