This is an automated email from the ASF dual-hosted git repository.
ggregory 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 29012d70 CODEC-311: Fix possible ArrayIndexOutOfBoundException thrown
by RefinedSoundex.getMappingCode() (#219)
29012d70 is described below
commit 29012d703d5e079338f9daa9ebceee3ef7b7d93e
Author: Arthur Chan <[email protected]>
AuthorDate: Sat Nov 25 03:11:52 2023 +0000
CODEC-311: Fix possible ArrayIndexOutOfBoundException thrown by
RefinedSoundex.getMappingCode() (#219)
* CODEC-311: Fix possible ArrayIndexOutOfBoundException
Signed-off-by: Arthur Chan <[email protected]>
* CODEC-311: Add unit test
Signed-off-by: Arthur Chan <[email protected]>
* Use final
---------
Signed-off-by: Arthur Chan <[email protected]>
Co-authored-by: Gary Gregory <[email protected]>
---
.../java/org/apache/commons/codec/language/RefinedSoundex.java | 6 +++++-
.../org/apache/commons/codec/language/RefinedSoundexTest.java | 10 ++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git
a/src/main/java/org/apache/commons/codec/language/RefinedSoundex.java
b/src/main/java/org/apache/commons/codec/language/RefinedSoundex.java
index 30c7df91..ea0421e9 100644
--- a/src/main/java/org/apache/commons/codec/language/RefinedSoundex.java
+++ b/src/main/java/org/apache/commons/codec/language/RefinedSoundex.java
@@ -173,7 +173,11 @@ public class RefinedSoundex implements StringEncoder {
if (!Character.isLetter(c)) {
return 0;
}
- return this.soundexMapping[Character.toUpperCase(c) - 'A'];
+ final int index = Character.toUpperCase(c) - 'A';
+ if (index < 0 || index >= this.soundexMapping.length) {
+ return 0;
+ }
+ return this.soundexMapping[index];
}
/**
diff --git
a/src/test/java/org/apache/commons/codec/language/RefinedSoundexTest.java
b/src/test/java/org/apache/commons/codec/language/RefinedSoundexTest.java
index 0494f405..16116b67 100644
--- a/src/test/java/org/apache/commons/codec/language/RefinedSoundexTest.java
+++ b/src/test/java/org/apache/commons/codec/language/RefinedSoundexTest.java
@@ -79,6 +79,16 @@ public class RefinedSoundexTest extends
AbstractStringEncoderTest<RefinedSoundex
assertEquals(0, code, "Code does not equals zero");
}
+ @Test
+ public void testInvalidSoundexCharacter() {
+ final char[] invalid = new char[256];
+ for (int i = 0; i < invalid.length; i++) {
+ invalid[i] = (char)i;
+ }
+
+ assertEquals(new RefinedSoundex().encode(new String(invalid)),
"A0136024043780159360205050136024043780159360205053");
+ }
+
@Test
public void testNewInstance() {
assertEquals("D6043", new RefinedSoundex().soundex("dogs"));