You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ki...@apache.org on 2019/08/25 00:14:43 UTC

[commons-lang] 01/03: LANG-1475 Fix unwrap StringIndexOutOfBoundsException

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

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

commit 06aea7e74cfe4a1578cb76672f1562132090c205
Author: Stzx <si...@hotmail.com>
AuthorDate: Tue Aug 20 11:29:55 2019 +0800

    LANG-1475 Fix unwrap StringIndexOutOfBoundsException
    
    When the string length is shorter than two, it should be returned directly without operation.
---
 src/main/java/org/apache/commons/lang3/StringUtils.java  | 16 ++++++++++------
 .../java/org/apache/commons/lang3/StringUtilsTest.java   |  4 ++++
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index d3388f7..c0c4635 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -9159,8 +9159,10 @@ public class StringUtils {
      * StringUtils.unwrap(null, null)         = null
      * StringUtils.unwrap(null, '\0')         = null
      * StringUtils.unwrap(null, '1')          = null
+     * StringUtils.unwrap("a", 'a')           = "a"
+     * StringUtils.unwrap("aa", 'a')           = ""
      * StringUtils.unwrap("\'abc\'", '\'')    = "abc"
-     * StringUtils.unwrap("AABabcBAA", 'A')  = "ABabcBA"
+     * StringUtils.unwrap("AABabcBAA", 'A')   = "ABabcBA"
      * StringUtils.unwrap("A", '#')           = "A"
      * StringUtils.unwrap("#A", '#')          = "#A"
      * StringUtils.unwrap("A#", '#')          = "A#"
@@ -9175,16 +9177,15 @@ public class StringUtils {
      * @since 3.6
      */
     public static String unwrap(final String str, final char wrapChar) {
-        if (isEmpty(str) || wrapChar == CharUtils.NUL) {
+        if (isEmpty(str) || wrapChar == CharUtils.NUL || str.length() == 1) {
             return str;
         }
 
         if (str.charAt(0) == wrapChar && str.charAt(str.length() - 1) == wrapChar) {
             final int startIndex = 0;
             final int endIndex = str.length() - 1;
-            if (endIndex != -1) {
-                return str.substring(startIndex + 1, endIndex);
-            }
+
+            return str.substring(startIndex + 1, endIndex);
         }
 
         return str;
@@ -9199,6 +9200,8 @@ public class StringUtils {
      * StringUtils.unwrap(null, null)         = null
      * StringUtils.unwrap(null, "")           = null
      * StringUtils.unwrap(null, "1")          = null
+     * StringUtils.unwrap("a", "a")           = "a"
+     * StringUtils.unwrap("aa", "a")          = ""
      * StringUtils.unwrap("\'abc\'", "\'")    = "abc"
      * StringUtils.unwrap("\"abc\"", "\"")    = "abc"
      * StringUtils.unwrap("AABabcBAA", "AA")  = "BabcB"
@@ -9216,7 +9219,7 @@ public class StringUtils {
      * @since 3.6
      */
     public static String unwrap(final String str, final String wrapToken) {
-        if (isEmpty(str) || isEmpty(wrapToken)) {
+        if (isEmpty(str) || isEmpty(wrapToken) || str.length() == 1) {
             return str;
         }
 
@@ -9224,6 +9227,7 @@ public class StringUtils {
             final int startIndex = str.indexOf(wrapToken);
             final int endIndex = str.lastIndexOf(wrapToken);
             final int wrapLength = wrapToken.length();
+
             if (startIndex != -1 && endIndex != -1) {
                 return str.substring(startIndex + wrapLength, endIndex);
             }
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index 3810a5c..b2e80e6 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -3073,6 +3073,8 @@ public class StringUtilsTest {
         assertNull(StringUtils.unwrap(null, '1'));
 
         assertEquals("abc", StringUtils.unwrap("abc", null));
+        assertEquals("a", StringUtils.unwrap("a", "a"));
+        assertEquals("", StringUtils.unwrap("aa", "a"));
         assertEquals("abc", StringUtils.unwrap("\'abc\'", '\''));
         assertEquals("abc", StringUtils.unwrap("AabcA", 'A'));
         assertEquals("AabcA", StringUtils.unwrap("AAabcAA", 'A'));
@@ -3090,6 +3092,8 @@ public class StringUtilsTest {
 
         assertEquals("abc", StringUtils.unwrap("abc", null));
         assertEquals("abc", StringUtils.unwrap("abc", ""));
+        assertEquals("a", StringUtils.unwrap("a", "a"));
+        assertEquals("", StringUtils.unwrap("aa", "a"));
         assertEquals("abc", StringUtils.unwrap("\'abc\'", "\'"));
         assertEquals("abc", StringUtils.unwrap("\"abc\"", "\""));
         assertEquals("abc\"xyz", StringUtils.unwrap("\"abc\"xyz\"", "\""));