You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/01/26 02:27:40 UTC

(commons-text) branch master updated: [TEXT-232] WordUtils.containsAllWords​() may throw PatternSyntaxException

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


The following commit(s) were added to refs/heads/master by this push:
     new cc45196d [TEXT-232] WordUtils.containsAllWords​() may throw PatternSyntaxException
cc45196d is described below

commit cc45196d0815ae41eee66c7f53fd410d30540009
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Jan 25 21:27:35 2024 -0500

    [TEXT-232] WordUtils.containsAllWords​() may throw
    PatternSyntaxException
---
 src/changes/changes.xml                            |  3 ++
 .../java/org/apache/commons/text/WordUtils.java    |  2 +-
 .../org/apache/commons/text/WordUtilsTest.java     | 39 ++++++++++++----------
 3 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 6303d49d..4c76f2a8 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -46,6 +46,9 @@ The <action> type attribute can be add,update,fix,remove.
   </properties>
   <body>
   <release version="1.11.1" date="202Y-MM-DD" description="Release 1.11.1. Requires Java 8 or above.">
+    <!-- FIX -->
+    <action issue="TEXT-232" type="fix" dev="ggregory" due-to="Gary Gregory">WordUtils.containsAllWords​() may throw PatternSyntaxException.</action>
+    <!-- UPDATE -->
     <action                  type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.13.0 to 3.14.0.</action>
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump commons.bytebuddy.version from 1.14.9 to 1.14.11 #476, #482.</action>
     <action                  type="update" dev="ggregory" due-to="Dependabot">Bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.1.1 #474.</action>
diff --git a/src/main/java/org/apache/commons/text/WordUtils.java b/src/main/java/org/apache/commons/text/WordUtils.java
index 0b1929e6..306c68af 100644
--- a/src/main/java/org/apache/commons/text/WordUtils.java
+++ b/src/main/java/org/apache/commons/text/WordUtils.java
@@ -281,7 +281,7 @@ public class WordUtils {
             if (StringUtils.isBlank(w)) {
                 return false;
             }
-            final Pattern p = Pattern.compile(".*\\b" + w + "\\b.*");
+            final Pattern p = Pattern.compile(".*\\b" + Pattern.quote(w.toString()) + "\\b.*");
             if (!p.matcher(word).matches()) {
                 return false;
             }
diff --git a/src/test/java/org/apache/commons/text/WordUtilsTest.java b/src/test/java/org/apache/commons/text/WordUtilsTest.java
index 9f1270c4..2a6f9d68 100644
--- a/src/test/java/org/apache/commons/text/WordUtilsTest.java
+++ b/src/test/java/org/apache/commons/text/WordUtilsTest.java
@@ -18,6 +18,8 @@ package org.apache.commons.text;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
@@ -164,23 +166,26 @@ public class WordUtilsTest {
 
     @Test
     public void testContainsAllWords_StringString() {
-        assertThat(WordUtils.containsAllWords(null, (String) null)).isFalse();
-        assertThat(WordUtils.containsAllWords(null, "")).isFalse();
-        assertThat(WordUtils.containsAllWords(null, "ab")).isFalse();
-
-        assertThat(WordUtils.containsAllWords("", (String) null)).isFalse();
-        assertThat(WordUtils.containsAllWords("", "")).isFalse();
-        assertThat(WordUtils.containsAllWords("", "ab")).isFalse();
-
-        assertThat(WordUtils.containsAllWords("foo", (String) null)).isFalse();
-        assertThat(WordUtils.containsAllWords("bar", "")).isFalse();
-        assertThat(WordUtils.containsAllWords("zzabyycdxx", "by")).isFalse();
-        assertThat(WordUtils.containsAllWords("lorem ipsum dolor sit amet", "ipsum", "lorem", "dolor")).isTrue();
-        assertThat(WordUtils.containsAllWords("lorem ipsum dolor sit amet", "ipsum", null, "lorem", "dolor")).isFalse();
-        assertThat(WordUtils.containsAllWords("lorem ipsum null dolor sit amet", "ipsum", null, "lorem", "dolor"))
-            .isFalse();
-        assertThat(WordUtils.containsAllWords("ab", "b")).isFalse();
-        assertThat(WordUtils.containsAllWords("ab", "z")).isFalse();
+        assertFalse(WordUtils.containsAllWords(null, (String) null));
+        assertFalse(WordUtils.containsAllWords(null, ""));
+        assertFalse(WordUtils.containsAllWords(null, "ab"));
+
+        assertFalse(WordUtils.containsAllWords("", (String) null));
+        assertFalse(WordUtils.containsAllWords("", ""));
+        assertFalse(WordUtils.containsAllWords("", "ab"));
+
+        assertFalse(WordUtils.containsAllWords("foo", (String) null));
+        assertFalse(WordUtils.containsAllWords("bar", ""));
+        assertFalse(WordUtils.containsAllWords("zzabyycdxx", "by"));
+        assertTrue(WordUtils.containsAllWords("lorem ipsum dolor sit amet", "ipsum", "lorem", "dolor"));
+        assertFalse(WordUtils.containsAllWords("lorem ipsum dolor sit amet", "ipsum", null, "lorem", "dolor"));
+        assertFalse(WordUtils.containsAllWords("lorem ipsum null dolor sit amet", "ipsum", null, "lorem", "dolor"));
+        assertFalse(WordUtils.containsAllWords("ab", "b"));
+        assertFalse(WordUtils.containsAllWords("ab", "z"));
+        assertFalse(WordUtils.containsAllWords("ab", "["));
+        assertFalse(WordUtils.containsAllWords("ab", "]"));
+        assertFalse(WordUtils.containsAllWords("ab", "*"));
+        assertTrue(WordUtils.containsAllWords("ab x", "ab", "x"));
     }
 
     @Test