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-lang.git


The following commit(s) were added to refs/heads/master by this push:
     new 80bf07c61 fix lookup translator code point count for supplementary 
keys (#1691)
80bf07c61 is described below

commit 80bf07c61721520ef12679fc394ac5584c1e9536
Author: alhuda <[email protected]>
AuthorDate: Sun Jun 7 16:58:24 2026 +0530

    fix lookup translator code point count for supplementary keys (#1691)
    
    Co-authored-by: alhudz <[email protected]>
---
 .../commons/lang3/text/translate/LookupTranslator.java       |  2 +-
 .../commons/lang3/text/translate/LookupTranslatorTest.java   | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/commons/lang3/text/translate/LookupTranslator.java 
b/src/main/java/org/apache/commons/lang3/text/translate/LookupTranslator.java
index d0a102ab5..9fbae7f96 100644
--- 
a/src/main/java/org/apache/commons/lang3/text/translate/LookupTranslator.java
+++ 
b/src/main/java/org/apache/commons/lang3/text/translate/LookupTranslator.java
@@ -86,7 +86,7 @@ public int translate(final CharSequence input, final int 
index, final Writer out
 
                 if (result != null) {
                     out.write(result);
-                    return i;
+                    return Character.codePointCount(input, index, index + i);
                 }
             }
         }
diff --git 
a/src/test/java/org/apache/commons/lang3/text/translate/LookupTranslatorTest.java
 
b/src/test/java/org/apache/commons/lang3/text/translate/LookupTranslatorTest.java
index e91bda606..7de159735 100644
--- 
a/src/test/java/org/apache/commons/lang3/text/translate/LookupTranslatorTest.java
+++ 
b/src/test/java/org/apache/commons/lang3/text/translate/LookupTranslatorTest.java
@@ -50,4 +50,16 @@ void testLang882() throws IOException {
         assertEquals("two", out.toString(), "Incorrect value");
     }
 
+    @Test
+    void testSupplementaryKey() throws IOException {
+        final String key = new String(Character.toChars(0x1D54F)); // a single 
supplementary code point
+        final LookupTranslator lt = new LookupTranslator(new CharSequence[][] 
{ { key, "X" } });
+        final StringWriter out = new StringWriter();
+        final int result = lt.translate(key, 0, out);
+        assertEquals(1, result, "Incorrect code point consumption");
+        assertEquals("X", out.toString(), "Incorrect value");
+        // the matched key must not over-consume the following character
+        assertEquals("XY", lt.translate(key + "Y"), "Trailing character must 
be preserved");
+    }
+
 }

Reply via email to