aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Wilson <jesse@swank.ca>2011-07-12 16:05:22 +0000
committerJesse Wilson <jesse@swank.ca>2011-07-12 16:05:22 +0000
commitd3a4b48ad92ce5e5a45a7046e737984608c22cc6 (patch)
tree1d9561ded30bd10c78f9591366a0193e1d015e65
parent7dca7242926bf2e8692e54e2b33e303c6fb67707 (diff)
downloadandroid_external_gson-d3a4b48ad92ce5e5a45a7046e737984608c22cc6.tar.gz
android_external_gson-d3a4b48ad92ce5e5a45a7046e737984608c22cc6.tar.bz2
android_external_gson-d3a4b48ad92ce5e5a45a7046e737984608c22cc6.zip
Unconditionally escape unicode newline characters.
Fixes issue 341.
-rw-r--r--gson/src/main/java/com/google/gson/stream/JsonWriter.java9
-rw-r--r--gson/src/test/java/com/google/gson/stream/JsonWriterTest.java9
2 files changed, 18 insertions, 0 deletions
diff --git a/gson/src/main/java/com/google/gson/stream/JsonWriter.java b/gson/src/main/java/com/google/gson/stream/JsonWriter.java
index dba653a1..0e3691ce 100644
--- a/gson/src/main/java/com/google/gson/stream/JsonWriter.java
+++ b/gson/src/main/java/com/google/gson/stream/JsonWriter.java
@@ -431,6 +431,10 @@ 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 '"':
@@ -471,6 +475,11 @@ public final class JsonWriter implements Closeable {
}
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/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java b/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java
index 3b60b184..41a9621c 100644
--- a/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java
+++ b/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java
@@ -290,6 +290,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);