From 14549725ef9d62d851542de29543c3caa07d3f19 Mon Sep 17 00:00:00 2001 From: jwilson Date: Thu, 2 Jun 2016 09:31:32 -0400 Subject: [PATCH] Fail on invalid escapes. Related to https://github.com/google/gson/issues/824 --- .../moshi/BufferedSourceJsonReader.java | 3 +++ .../moshi/BufferedSourceJsonReaderTest.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/moshi/src/main/java/com/squareup/moshi/BufferedSourceJsonReader.java b/moshi/src/main/java/com/squareup/moshi/BufferedSourceJsonReader.java index 9114119..75db55c 100644 --- a/moshi/src/main/java/com/squareup/moshi/BufferedSourceJsonReader.java +++ b/moshi/src/main/java/com/squareup/moshi/BufferedSourceJsonReader.java @@ -1081,7 +1081,10 @@ final class BufferedSourceJsonReader extends JsonReader { case '\'': case '"': case '\\': + return (char) escaped; + default: + if (!lenient) throw syntaxError("Invalid escape sequence: \\" + (char) escaped); return (char) escaped; } } diff --git a/moshi/src/test/java/com/squareup/moshi/BufferedSourceJsonReaderTest.java b/moshi/src/test/java/com/squareup/moshi/BufferedSourceJsonReaderTest.java index aac8ba2..ef0724b 100644 --- a/moshi/src/test/java/com/squareup/moshi/BufferedSourceJsonReaderTest.java +++ b/moshi/src/test/java/com/squareup/moshi/BufferedSourceJsonReaderTest.java @@ -1771,6 +1771,24 @@ public final class BufferedSourceJsonReaderTest { } } + @Test public void invalidEscape() throws IOException { + JsonReader reader = newReader("[\"str\\ing\"]"); + reader.beginArray(); + try { + reader.nextString(); + fail(); + } catch (IOException expected) { + assertThat(expected).hasMessage("Invalid escape sequence: \\i at path $[0]"); + } + } + + @Test public void lenientInvalidEscape() throws IOException { + JsonReader reader = newReader("[\"str\\ing\"]"); + reader.setLenient(true); + reader.beginArray(); + assertThat(reader.nextString()).isEqualTo("string"); + } + @Test public void selectName() throws IOException { JsonReader.Options abc = JsonReader.Options.of("a", "b", "c");