This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-codec.git


The following commit(s) were added to refs/heads/master by this push:
     new 38087c0f [CODEC-347] Handle names emptied during Match Rating Approach 
cleaning (#448)
38087c0f is described below

commit 38087c0fc5233120a60c23de5318a4fb12ba648a
Author: Aryan R. Ganjoo <[email protected]>
AuthorDate: Sun Oct 18 19:00:12 2026 +0530

    [CODEC-347] Handle names emptied during Match Rating Approach cleaning 
(#448)
    
    * CODEC-347 Handle names emptied during MRA cleaning
    
    Return false from isEncodeEquals when cleaning removes all characters, add 
public-API regression coverage, and record the issue in the changes log.
    
    * Remove fix action for CODEC-347 from changes.xml
    
    Removed a fix action related to CODEC-347 from the release notes.
    
    ---------
    
    Co-authored-by: Gary Gregory <[email protected]>
---
 .../commons/codec/language/MatchRatingApproachEncoder.java    |  5 +++++
 .../codec/language/MatchRatingApproachEncoderTest.java        | 11 +++++++++++
 2 files changed, 16 insertions(+)

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 e9d9a9e1..664dacf6 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 class MatchRatingApproachEncoder implements 
StringEncoder {
         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 6d14d0eb..d94bb3c0 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 @@ class MatchRatingApproachEncoderTest extends 
AbstractStringEncoderTest<MatchRati
         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"));

Reply via email to