From dc838a5bb18bf0d2ce68cd2d15636c353c4dd007 Mon Sep 17 00:00:00 2001 From: Rohan Nagar Date: Tue, 29 Jun 2021 08:06:41 -0700 Subject: [PATCH] Fix #19: Check TLD length before checking for the - character --- src/main/java/com/sanctionco/jmail/JMail.java | 6 +++--- .../sanctionco/jmail/helpers/AdditionalEmailProvider.java | 3 ++- src/test/resources/invalid-addresses.csv | 1 + src/test/resources/valid-addresses.csv | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sanctionco/jmail/JMail.java b/src/main/java/com/sanctionco/jmail/JMail.java index 2459d11..5036cce 100644 --- a/src/main/java/com/sanctionco/jmail/JMail.java +++ b/src/main/java/com/sanctionco/jmail/JMail.java @@ -369,6 +369,9 @@ private static Optional internalTryParse(String email) { // Check that local-part does not end with '.' if (localPart.charAt(localPart.length() - 1) == '.') return Optional.empty(); + // Ensure the TLD is not empty or greater than 63 chars + if (currentDomainPart.length() <= 0 || currentDomainPart.length() > 63) return Optional.empty(); + // Check that the final domain part does not start with '-' // We already checked to make sure it doesn't end with '-' if (currentDomainPart.charAt(0) == '-') return Optional.empty(); @@ -376,9 +379,6 @@ private static Optional internalTryParse(String email) { // Ensure the last domain part (TLD) is not all numeric if (currentDomainPart.toString().chars().allMatch(Character::isDigit)) return Optional.empty(); - // Ensure the TLD is not greater than 63 chars - if (currentDomainPart.length() > 63) return Optional.empty(); - domainParts.add(currentDomainPart.toString()); return Optional.of(new Email( diff --git a/src/test/java/com/sanctionco/jmail/helpers/AdditionalEmailProvider.java b/src/test/java/com/sanctionco/jmail/helpers/AdditionalEmailProvider.java index 798c0a5..29cc4db 100644 --- a/src/test/java/com/sanctionco/jmail/helpers/AdditionalEmailProvider.java +++ b/src/test/java/com/sanctionco/jmail/helpers/AdditionalEmailProvider.java @@ -28,7 +28,8 @@ public static Stream provideInvalidWhitespaceEmails() { "\"test\rblah\"@test.org", "\"test\\\r\n blah\"@test.org", "Invalid \\\n Folding \\\n Whitespace@test.org", - "test.\r\n\r\n obs@syntax.com"); + "test.\r\n\r\n obs@syntax.com", + "ABC.DEF@GHI.JKL . "); } // Valid emails with quotes diff --git a/src/test/resources/invalid-addresses.csv b/src/test/resources/invalid-addresses.csv index bcdd2a4..478bf69 100644 --- a/src/test/resources/invalid-addresses.csv +++ b/src/test/resources/invalid-addresses.csv @@ -138,3 +138,4 @@ Joe A Smith email@example.com ; Joe A Smith ; The address part must be valid (cannot end with a dash) Joe A Smith ; The address part must be valid (domain cannot start with a dash) Joe A Smith ; The address part must be valid (missing @ character and domain) +ABC.DEF@GHI. (MNO) ; The domain cannot end with the . character even with an ending comment diff --git a/src/test/resources/valid-addresses.csv b/src/test/resources/valid-addresses.csv index efbce8e..1a72a95 100644 --- a/src/test/resources/valid-addresses.csv +++ b/src/test/resources/valid-addresses.csv @@ -122,3 +122,4 @@ abc\\@test.org,abc\\,test.org Joe A Smith ,email,example.com "John Michael" ,tester,test.net A ,apple,pie.com +ABC.DEF@GHI.JKL (MNO),ABC.DEF,GHI.JKL (MNO)