Fix a bug in ByteChunk.indexOf(String, ...)
authorkkolinko <kkolinko@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 17 May 2010 16:28:44 +0000 (16:28 +0000)
committerkkolinko <kkolinko@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 17 May 2010 16:28:44 +0000 (16:28 +0000)
The problem is that the method could not find a string which length is 1,
as the only successful exit from the method was from inside the loop that
checks the second and subsequent characters.

I added the testcase for this in r945230.
In the test the bc.indexOf("o", 0, 1, 5) call returned -1, instead of 7.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@945231 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/tomcat/util/buf/ByteChunk.java

index a4fd986..53edd4e 100644 (file)
@@ -685,15 +685,16 @@ public final class ByteChunk implements Cloneable, Serializable {
         // Look for first char 
         int srcEnd = srcOff + srcLen;
         
+        mainLoop:
         for( int i=myOff+start; i <= (end - srcLen); i++ ) {
             if( buff[i] != first ) continue;
             // found first char, now look for a match
             int myPos=i+1;
             for( int srcPos=srcOff + 1; srcPos< srcEnd; ) {
                 if( buff[myPos++] != src.charAt( srcPos++ ))
-                    break;
-                if( srcPos==srcEnd ) return i-start; // found it
+                    continue mainLoop;
             }
+            return i-start; // found it
         }
         return -1;
     }