diff options
author | Jesse Wilson <jessewilson@google.com> | 2011-07-18 14:27:31 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-18 14:27:31 -0700 |
commit | 1a1d731c9cc0209570472a9c8b6e59da0b545968 (patch) | |
tree | 9bccbde9735eb71373e549d86f5a38c801e04b6a | |
parent | 989571eeca547db5f8972560c2d45f00be92a327 (diff) | |
parent | 0fc0edfd273f9d92b9f9fe4f49382b11104f55f0 (diff) | |
download | frameworks_base-1a1d731c9cc0209570472a9c8b6e59da0b545968.zip frameworks_base-1a1d731c9cc0209570472a9c8b6e59da0b545968.tar.gz frameworks_base-1a1d731c9cc0209570472a9c8b6e59da0b545968.tar.bz2 |
Merge "Always escape chars that JavaScript treats as newlines."
-rw-r--r-- | core/java/android/util/JsonWriter.java | 10 | ||||
-rw-r--r-- | core/tests/coretests/src/android/util/JsonWriterTest.java | 9 |
2 files changed, 19 insertions, 0 deletions
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)); diff --git a/core/tests/coretests/src/android/util/JsonWriterTest.java b/core/tests/coretests/src/android/util/JsonWriterTest.java index b29e2fd..1239a3c 100644 --- a/core/tests/coretests/src/android/util/JsonWriterTest.java +++ b/core/tests/coretests/src/android/util/JsonWriterTest.java @@ -289,6 +289,15 @@ public final class JsonWriterTest extends TestCase { + "\"\\u0019\"]", stringWriter.toString()); } + public void testUnicodeLineBreaksEscaped() throws IOException { + StringWriter stringWriter = new StringWriter(); + JsonWriter jsonWriter = new JsonWriter(stringWriter); + jsonWriter.beginArray(); + jsonWriter.value("\u2028 \u2029"); + jsonWriter.endArray(); + assertEquals("[\"\\u2028 \\u2029\"]", stringWriter.toString()); + } + public void testEmptyArray() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); |