diff --git a/gson/src/main/java/com/google/gson/stream/JsonReader.java b/gson/src/main/java/com/google/gson/stream/JsonReader.java index 7a5e9cbb..20656f6c 100644 --- a/gson/src/main/java/com/google/gson/stream/JsonReader.java +++ b/gson/src/main/java/com/google/gson/stream/JsonReader.java @@ -1561,8 +1561,11 @@ public class JsonReader implements Closeable { case '\'': case '"': case '\\': + case '/': + return escaped; default: - return escaped; + // throw error when none of the above cases are matched + throw syntaxError("Invalid escape sequence"); } } diff --git a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java index 48279dac..d6b7a838 100644 --- a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java +++ b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java @@ -174,6 +174,21 @@ public final class JsonReaderTest extends TestCase { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + public void testInvalidJsonInput() throws IOException { + String json = "{\n" + + " \"h\\ello\": true,\n" + + " \"foo\": [\"world\"]\n" + + "}"; + + JsonReader reader = new JsonReader(reader(json)); + reader.beginObject(); + try { + reader.nextName(); + fail(); + } catch (IOException expected) { + } + } + public void testNulls() { try { new JsonReader(null);