summaryrefslogtreecommitdiffstats
path: root/json
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2011-07-20 12:30:38 -0700
committerJesse Wilson <jessewilson@google.com>2011-07-20 12:30:38 -0700
commit037fb18dd4ba3f54c5b2fb5386c5673e1db5babf (patch)
tree0d278c4a80cd5aeae196f74afc23f8617a5e58b1 /json
parentb1f55cb6f95928be969a8fe5c7447e13f14d0a68 (diff)
downloadlibcore-037fb18dd4ba3f54c5b2fb5386c5673e1db5babf.zip
libcore-037fb18dd4ba3f54c5b2fb5386c5673e1db5babf.tar.gz
libcore-037fb18dd4ba3f54c5b2fb5386c5673e1db5babf.tar.bz2
Skip byte order mark (BOM) in org.json
Bug: http://code.google.com/p/android/issues/detail?id=18508 Change-Id: Ib992a0a4b22e340446abab14e4f32df5efcd0b49
Diffstat (limited to 'json')
-rw-r--r--json/src/main/java/org/json/JSONTokener.java4
-rw-r--r--json/src/test/java/org/json/JSONTokenerTest.java12
2 files changed, 16 insertions, 0 deletions
diff --git a/json/src/main/java/org/json/JSONTokener.java b/json/src/main/java/org/json/JSONTokener.java
index dbc8f58..ebfabe4 100644
--- a/json/src/main/java/org/json/JSONTokener.java
+++ b/json/src/main/java/org/json/JSONTokener.java
@@ -76,6 +76,10 @@ public class JSONTokener {
* called.
*/
public JSONTokener(String in) {
+ // consume an optional byte order mark (BOM) if it exists
+ if (in != null && in.startsWith("\ufeff")) {
+ in = in.substring(1);
+ }
this.in = in;
}
diff --git a/json/src/test/java/org/json/JSONTokenerTest.java b/json/src/test/java/org/json/JSONTokenerTest.java
index 528022a..de3a59a 100644
--- a/json/src/test/java/org/json/JSONTokenerTest.java
+++ b/json/src/test/java/org/json/JSONTokenerTest.java
@@ -574,6 +574,18 @@ public class JSONTokenerTest extends TestCase {
assertEquals("skipTo shouldn't stop when it sees '\\0'", 'F', tokener.next());
}
+ public void testBomIgnoredAsFirstCharacterOfDocument() throws JSONException {
+ JSONTokener tokener = new JSONTokener("\ufeff[]");
+ JSONArray array = (JSONArray) tokener.nextValue();
+ assertEquals(0, array.length());
+ }
+
+ public void testBomTreatedAsCharacterInRestOfDocument() throws JSONException {
+ JSONTokener tokener = new JSONTokener("[\ufeff]");
+ JSONArray array = (JSONArray) tokener.nextValue();
+ assertEquals(1, array.length());
+ }
+
public void testDehexchar() {
assertEquals( 0, JSONTokener.dehexchar('0'));
assertEquals( 1, JSONTokener.dehexchar('1'));