diff --git a/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala b/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala index b7c9b5d4ce..c00056a3e8 100644 --- a/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/util/ByteStringSpec.scala @@ -895,6 +895,15 @@ class ByteStringSpec extends WordSpec with Matchers with Checkers { bytes == array.toSeq } } + + "copying chunks to an array" in { + val iterator = (ByteString("123") ++ ByteString("456")).iterator + val array = Array.ofDim[Byte](6) + iterator.copyToArray(array, 0, 2) + iterator.copyToArray(array, 2, 2) + iterator.copyToArray(array, 4, 2) + assert(new String(array) === "123456") + } } "decode data correctly" when { diff --git a/akka-actor/src/main/scala/akka/util/ByteIterator.scala b/akka-actor/src/main/scala/akka/util/ByteIterator.scala index 5865555785..9560248fec 100644 --- a/akka-actor/src/main/scala/akka/util/ByteIterator.scala +++ b/akka-actor/src/main/scala/akka/util/ByteIterator.scala @@ -290,7 +290,9 @@ object ByteIterator { current.copyToArray(xs, pos, n) pos += n rest -= n - dropCurrent() + if (current.isEmpty) { + dropCurrent() + } } normalize() }