From 6ceafdda8ce9a8190c8a459dc76414da7e6f5aaf Mon Sep 17 00:00:00 2001 From: Dude so hot Date: Sat, 10 May 2025 00:28:05 +0800 Subject: [PATCH] Fix ArrayIndexOutOfBoundsException in okio.Sink.asKotlinxIoRawSink --- .../kotlinx-io-okio/common/src/OkioAdapters.kt | 2 +- .../kotlinx-io-okio/common/test/OkioAdaptersTest.kt | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/integration/kotlinx-io-okio/common/src/OkioAdapters.kt b/integration/kotlinx-io-okio/common/src/OkioAdapters.kt index 92a3f66f..920fdf91 100644 --- a/integration/kotlinx-io-okio/common/src/OkioAdapters.kt +++ b/integration/kotlinx-io-okio/common/src/OkioAdapters.kt @@ -109,8 +109,8 @@ public fun okio.Sink.asKotlinxIoRawSink(): RawSink = object : RawSink { buffer.write(data, from, toRead) toRead } - this@asKotlinxIoRawSink.write(buffer, byteCount) } + this@asKotlinxIoRawSink.write(buffer, byteCount) } override fun flush() = withOkio2KxIOExceptionMapping { diff --git a/integration/kotlinx-io-okio/common/test/OkioAdaptersTest.kt b/integration/kotlinx-io-okio/common/test/OkioAdaptersTest.kt index 84a6cb68..200f6649 100644 --- a/integration/kotlinx-io-okio/common/test/OkioAdaptersTest.kt +++ b/integration/kotlinx-io-okio/common/test/OkioAdaptersTest.kt @@ -52,6 +52,19 @@ class OkioAdaptersTest { } } + @Test + fun okioSinkLargeWrite() { + val arrayLength = 8193 + val data = ByteArray(arrayLength) { it.toByte() } + val kxBuffer = kotlinx.io.Buffer().also { it.write(data) } + val okioBuffer = okio.Buffer() + val okioSink = okioBuffer as okio.Sink + val wrapper = okioSink.asKotlinxIoRawSink() + wrapper.write(kxBuffer, arrayLength.toLong()) + assertContentEquals(data, okioBuffer.readByteArray()) + assertTrue(kxBuffer.exhausted()) + } + @Test fun okioSinkViewDelegation() { var closed = false