@@ -333,23 +333,42 @@ internal inline fun RealBufferedSource.commonIndexOf(b: Byte, fromIndex: Long, t
333333 return - 1L
334334}
335335
336- internal inline fun RealBufferedSource.commonIndexOf (
336+ internal fun RealBufferedSource.commonIndexOf (
337337 bytes : ByteString ,
338+ bytesOffset : Int = 0,
339+ byteCount : Int = bytes.size,
338340 fromIndex : Long ,
339341 toIndex : Long = Long .MAX_VALUE ,
340342): Long {
343+ checkOffsetAndCount(bytes.size.toLong(), bytesOffset.toLong(), byteCount.toLong())
344+
341345 var fromIndex = fromIndex
342346 check(! closed) { " closed" }
343347
344348 while (true ) {
345- val result = buffer.indexOf(bytes, fromIndex, toIndex)
349+ val result = buffer.commonIndexOf(
350+ bytes = bytes,
351+ bytesOffset = bytesOffset,
352+ byteCount = byteCount,
353+ fromIndex = fromIndex,
354+ toIndex = toIndex,
355+ )
346356 if (result != - 1L ) return result
347357
348358 val lastBufferSize = buffer.size
349- val nextFromIndex = lastBufferSize - bytes.size + 1
359+ val nextFromIndex = lastBufferSize - byteCount + 1
350360 if (nextFromIndex >= toIndex) return - 1L
351-
352- if (! matchPossibleByExpandingBuffer(buffer, bytes, fromIndex, toIndex)) return - 1L
361+ if (
362+ ! buffer.isMatchPossibleByExpandingBuffer(
363+ bytes = bytes,
364+ bytesOffset = bytesOffset,
365+ byteCount = byteCount,
366+ fromIndex = fromIndex,
367+ toIndex = toIndex,
368+ )
369+ ) {
370+ return - 1L
371+ }
353372 if (source.read(buffer, Segment .SIZE .toLong()) == - 1L ) return - 1L
354373
355374 // Keep searching, picking up from where we left off.
@@ -372,20 +391,21 @@ internal inline fun RealBufferedSource.commonIndexOf(
372391 * if the next loaded byte is 'o' then the result will be 1. But if the source's loaded content is
373392 * 'look', we know the result is -1 without loading more data.
374393 */
375- private fun matchPossibleByExpandingBuffer (
376- buffer : Buffer ,
394+ private fun Buffer.isMatchPossibleByExpandingBuffer (
377395 bytes : ByteString ,
396+ bytesOffset : Int ,
397+ byteCount : Int ,
378398 fromIndex : Long ,
379399 toIndex : Long ,
380400): Boolean {
381401 // Load new data if the match could come entirely in that new data.
382- if (buffer. size < toIndex) return true
402+ if (size < toIndex) return true
383403
384404 // Load new data if a prefix of 'bytes' matches a suffix of 'buffer'.
385- val begin = maxOf(1 , buffer. size - toIndex + 1 ).toInt()
386- val limit = minOf(bytes.size, buffer. size - fromIndex + 1 ).toInt()
405+ val begin = maxOf(1 , size - toIndex + 1 ).toInt()
406+ val limit = minOf(byteCount, size - fromIndex + 1 ).toInt()
387407 for (i in limit - 1 downTo begin) {
388- if (buffer. rangeEquals(buffer. size - i, bytes, 0 , i)) {
408+ if (rangeEquals(size - i, bytes, bytesOffset , i)) {
389409 return true
390410 }
391411 }
@@ -394,7 +414,10 @@ private fun matchPossibleByExpandingBuffer(
394414 return false
395415}
396416
397- internal inline fun RealBufferedSource.commonIndexOfElement (targetBytes : ByteString , fromIndex : Long ): Long {
417+ internal inline fun RealBufferedSource.commonIndexOfElement (
418+ targetBytes : ByteString ,
419+ fromIndex : Long ,
420+ ): Long {
398421 var fromIndex = fromIndex
399422 check(! closed) { " closed" }
400423
@@ -418,19 +441,18 @@ internal inline fun RealBufferedSource.commonRangeEquals(
418441): Boolean {
419442 check(! closed) { " closed" }
420443
421- if (offset < 0L ||
422- bytesOffset < 0 ||
423- byteCount < 0 ||
424- bytes.size - bytesOffset < byteCount
425- ) {
426- return false
427- }
428- for (i in 0 until byteCount) {
429- val bufferOffset = offset + i
430- if (! request(bufferOffset + 1 )) return false
431- if (buffer[bufferOffset] != bytes[bytesOffset + i]) return false
432- }
433- return true
444+ if (byteCount < 0 ) return false
445+ if (offset < 0 ) return false
446+ if (bytesOffset < 0 || bytesOffset + byteCount > bytes.size) return false
447+ if (byteCount == 0 ) return true
448+
449+ return commonIndexOf(
450+ bytes = bytes,
451+ bytesOffset = bytesOffset,
452+ byteCount = byteCount,
453+ fromIndex = offset,
454+ toIndex = offset + 1 ,
455+ ) != - 1L
434456}
435457
436458internal inline fun RealBufferedSource.commonPeek (): BufferedSource {
0 commit comments