From 0fc0edfd273f9d92b9f9fe4f49382b11104f55f0 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Mon, 18 Jul 2011 12:55:09 -0700 Subject: Always escape chars that JavaScript treats as newlines. Related GSON Bug: http://code.google.com/p/google-gson/issues/detail?id=341 Change-Id: I41b1615c4b3b4526f2223a75191f9b0699cdda12 --- core/java/android/util/JsonWriter.java | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'core/java/android/util') diff --git a/core/java/android/util/JsonWriter.java b/core/java/android/util/JsonWriter.java index 47e84c5..c1e6e40 100644 --- a/core/java/android/util/JsonWriter.java +++ b/core/java/android/util/JsonWriter.java @@ -407,6 +407,11 @@ public final class JsonWriter implements Closeable { * quotation marks except for the characters that must be escaped: * quotation mark, reverse solidus, and the control characters * (U+0000 through U+001F)." + * + * We also escape '\u2028' and '\u2029', which JavaScript interprets + * as newline characters. This prevents eval() from failing with a + * syntax error. + * http://code.google.com/p/google-gson/issues/detail?id=341 */ switch (c) { case '"': @@ -435,6 +440,11 @@ public final class JsonWriter implements Closeable { out.write("\\f"); break; + case '\u2028': + case '\u2029': + out.write(String.format("\\u%04x", (int) c)); + break; + default: if (c <= 0x1F) { out.write(String.format("\\u%04x", (int) c)); -- cgit v1.1