From bf8bbd2807ac927947986f57c5ae6954d25e7967 Mon Sep 17 00:00:00 2001 From: Den Kovalevsky Date: Wed, 5 Jul 2017 12:11:17 +0300 Subject: [PATCH] JsonObjectParser escape sequence processing fix #23292 --- .../akka/stream/scaladsl/JsonFramingSpec.scala | 15 +++++++++++++++ .../scala/akka/stream/impl/JsonObjectParser.scala | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/JsonFramingSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/JsonFramingSpec.scala index 74ae72586b..70f80a1dd3 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/JsonFramingSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/JsonFramingSpec.scala @@ -297,6 +297,21 @@ class JsonFramingSpec extends AkkaSpec { | "key": "\"" | }""".stripMargin } + + "successfully parse a string that contains escape sequence" in { + val buffer = new JsonObjectParser() + buffer.offer(ByteString( + """ + |{ + | "key": "\\\"" + | } + | """.stripMargin + )) + + buffer.poll().get.utf8String shouldBe """{ + | "key": "\\\"" + | }""".stripMargin + } } "has nested array" should { diff --git a/akka-stream/src/main/scala/akka/stream/impl/JsonObjectParser.scala b/akka-stream/src/main/scala/akka/stream/impl/JsonObjectParser.scala index c8320c57d3..530f1120db 100644 --- a/akka-stream/src/main/scala/akka/stream/impl/JsonObjectParser.scala +++ b/akka-stream/src/main/scala/akka/stream/impl/JsonObjectParser.scala @@ -120,7 +120,7 @@ import scala.annotation.switch pos += 1 trimFront += 1 } else if (input == Backslash) { - if (lastInput == Backslash) isStartOfEscapeSequence = false + if (lastInput == Backslash & isStartOfEscapeSequence) isStartOfEscapeSequence = false else isStartOfEscapeSequence = true pos += 1 } else if (input == DoubleQuote) {