You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2018/09/28 22:47:43 UTC

svn commit: r1842290 - in /commons/proper/codec/trunk/src: changes/changes.xml main/java/org/apache/commons/codec/language/ColognePhonetic.java test/java/org/apache/commons/codec/language/ColognePhoneticTest.java

Author: sebb
Date: Fri Sep 28 22:47:42 2018
New Revision: 1842290

URL: http://svn.apache.org/viewvc?rev=1842290&view=rev
Log:
CODEC-250 Wrong value calculated by Cologne Phonetic if a special character is placed between equal letters

Modified:
    commons/proper/codec/trunk/src/changes/changes.xml
    commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java
    commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/ColognePhoneticTest.java

Modified: commons/proper/codec/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/changes/changes.xml?rev=1842290&r1=1842289&r2=1842290&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/changes/changes.xml (original)
+++ commons/proper/codec/trunk/src/changes/changes.xml Fri Sep 28 22:47:42 2018
@@ -44,6 +44,7 @@ The <action> type attribute can be add,u
   <body>
     <release version="1.12" date="2017-MM-DD" description="Feature and fix release.">
       <!-- The first attribute below should be the issue id; makes it easier to navigate in the IDE outline -->
+      <action issue="CODEC-250" dev="sebb" type="fix" due-to="Alex Volodko">Wrong value calculated by Cologne Phonetic if a special character is placed between equal letters</action>
       <action issue="CODEC-244" dev="ggregory" type="update">Update from Java 6 to Java 7</action>
       <action issue="CODEC-240" dev="ggregory" type="add" due-to="Ioannis Sermetziadis">Add Percent-Encoding Codec (described in RFC3986 and RFC7578)</action>
       <action issue="CODEC-246" dev="ggregory" type="fix" due-to="Oscar Luis Vera Pérez">ColognePhoneticTest.testIsEncodeEquals missing assertions</action>

Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java?rev=1842290&r1=1842289&r2=1842290&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/ColognePhonetic.java Fri Sep 28 22:47:42 2018
@@ -337,13 +337,13 @@ public class ColognePhonetic implements
                 nextChar = CHAR_IGNORE;
             }
 
+            // OK to ignore H here because it only affects nextChar which has already been set up
+            if (chr == 'H' || chr < 'A' || chr > 'Z') {
+                    continue; // ignore unwanted characters
+            }
+
             if (arrayContains(AEIJOUY, chr)) {
                 code = '0';
-            } else if (chr == 'H' || chr < 'A' || chr > 'Z') {
-                if (lastCode == CHAR_FIRST_POS) {
-                    continue; // ignore leading unwanted characters
-                }
-                code = CHAR_IGNORE;
             } else if (chr == 'B' || (chr == 'P' && nextChar != 'H')) {
                 code = '1';
             } else if ((chr == 'D' || chr == 'T') && !arrayContains(SCZ, nextChar)) {
@@ -380,7 +380,7 @@ public class ColognePhonetic implements
             } else if (chr == 'M' || chr == 'N') {
                 code = '6';
             } else {
-                code = chr;
+                code = chr; // should not happen?
             }
 
             if (code != CHAR_IGNORE && (lastCode != code && (code != '0' || lastCode == CHAR_FIRST_POS) || code < '0' || code > '8')) {

Modified: commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/ColognePhoneticTest.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/ColognePhoneticTest.java?rev=1842290&r1=1842289&r2=1842290&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/ColognePhoneticTest.java (original)
+++ commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/ColognePhoneticTest.java Fri Sep 28 22:47:42 2018
@@ -235,6 +235,12 @@ public class ColognePhoneticTest extends
         this.checkEncodingVariations("67", data);
     }
 
+    @Test
+    public void testSpecialCharsBetweenSameLetters() throws EncoderException {
+        final String data[] = {"Test test", "Testtest", "Test-test", "TesT#Test", "TesT?test"};
+        this.checkEncodingVariations("28282", data);
+    }
+
     // Allow command-line testing
     public static void main(String args[]) {
         ColognePhonetic coder = new ColognePhonetic();