From 27c197808718ecd3f4ecd85ec080ff81ebd73338 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Sun, 28 Jun 2020 19:09:03 -0700 Subject: [PATCH] Exit ReadJsonFromInputStream if -1 byte is read It was possible to get stuck in a loop reading -1 from the client socket. --- .../internal/util/ReadJsonFromInputStream.scala | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala index fa9dd7862..ceaa98926 100644 --- a/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala +++ b/main-command/src/main/scala/sbt/internal/util/ReadJsonFromInputStream.scala @@ -57,6 +57,7 @@ private[sbt] object ReadJsonFromInputStream { onCarriageReturn = false consecutiveLineEndings += 1 case `carriageReturn` => onCarriageReturn = true + case -1 => running.set(false) case c => if (c == newline) getLine() else { @@ -66,14 +67,16 @@ private[sbt] object ReadJsonFromInputStream { onCarriageReturn = false consecutiveLineEndings = 0 } - } while (consecutiveLineEndings < 2) + } while (consecutiveLineEndings < 2 && running.get) drainHeaders() - val buf = new Array[Byte](len) - var offset = 0 - do { - offset += inputStream.read(buf, offset, len - offset) - } while (offset < len) - content = buf.toSeq + if (running.get) { + val buf = new Array[Byte](len) + var offset = 0 + do { + offset += inputStream.read(buf, offset, len - offset) + } while (offset < len && running.get) + if (running.get) content = buf.toSeq + } } } else if (line.startsWith("{")) { // Assume this is a json object with no headers