On 17/05/2010 17:28, kkoli...@apache.org wrote: > Author: kkolinko > Date: Mon May 17 16:28:44 2010 > New Revision: 945231 > > URL: http://svn.apache.org/viewvc?rev=945231&view=rev > Log: > Fix a bug in ByteChunk.indexOf(String, ...) > > 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. > > Modified: > tomcat/trunk/java/org/apache/tomcat/util/buf/ByteChunk.java > > Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/ByteChunk.java > URL: > http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/ByteChunk.java?rev=945231&r1=945230&r2=945231&view=diff > ============================================================================== > --- tomcat/trunk/java/org/apache/tomcat/util/buf/ByteChunk.java (original) > +++ tomcat/trunk/java/org/apache/tomcat/util/buf/ByteChunk.java Mon May 17 > 16:28:44 2010 > @@ -685,15 +685,16 @@ public final class ByteChunk implements > // 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; > }
That's pretty ugly. Is there really no other way? Mark --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org