diff --git a/src/main/java/org/apache/commons/codec/language/MatchRatingApproachEncoder.java b/src/main/java/org/apache/commons/codec/language/MatchRatingApproachEncoder.java index e9d9a9e147..664dacf623 100644 --- a/src/main/java/org/apache/commons/codec/language/MatchRatingApproachEncoder.java +++ b/src/main/java/org/apache/commons/codec/language/MatchRatingApproachEncoder.java @@ -236,6 +236,11 @@ public boolean isEncodeEquals(String name1, String name2) { name1 = cleanName(name1); name2 = cleanName(name2); + // Bulletproof if a name becomes empty after cleanName(name), consistent with encode(String) + if (name1.isEmpty() || name2.isEmpty()) { + return false; + } + // Actual MRA Algorithm // 1. Remove vowels diff --git a/src/test/java/org/apache/commons/codec/language/MatchRatingApproachEncoderTest.java b/src/test/java/org/apache/commons/codec/language/MatchRatingApproachEncoderTest.java index 6d14d0eb7a..d94bb3c034 100644 --- a/src/test/java/org/apache/commons/codec/language/MatchRatingApproachEncoderTest.java +++ b/src/test/java/org/apache/commons/codec/language/MatchRatingApproachEncoderTest.java @@ -381,6 +381,17 @@ final void testIsEncodeEqualsSecondNameJust1Letter_ReturnsFalse() { assertFalse(getStringEncoder().isEncodeEquals("test", "t")); } + @Test + final void testIsEncodeEquals_CornerCase_NameEmptyAfterCleaning_ReturnsFalse() { + // Names that become empty after cleanName(String), consistent with encode(String) returning "". + assertFalse(getStringEncoder().isEncodeEquals("--", "Smith")); + assertFalse(getStringEncoder().isEncodeEquals("Smith", "--")); + assertFalse(getStringEncoder().isEncodeEquals(".,-", "Smith")); + assertFalse(getStringEncoder().isEncodeEquals(" ", "Smith")); + assertFalse(getStringEncoder().isEncodeEquals("Smith", " ")); + assertFalse(getStringEncoder().isEncodeEquals("--", ".,")); + } + @Test final void testIsVowel_CapitalA_ReturnsTrue() { assertTrue(getStringEncoder().isVowel("A"));