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) {