Skip to content

Commit ecf87c3

Browse files
committed
libstd: Skip trailing whitespaces after JSON value
1 parent 0465d52 commit ecf87c3

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

src/libstd/json.rs

+9-12
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ impl parser for parser {
154154
fn parse() -> result::t<json, error> {
155155
alt self.parse_value() {
156156
ok(value) {
157+
// Skip trailing whitespaces.
158+
self.parse_whitespace();
157159
// Make sure there is no trailing characters.
158160
if self.eof() {
159161
ok(value)
@@ -392,7 +394,6 @@ impl parser for parser {
392394

393395
if self.ch == ']' {
394396
self.bump();
395-
self.parse_whitespace();
396397
ret ok(list(values));
397398
}
398399

@@ -407,11 +408,7 @@ impl parser for parser {
407408

408409
alt self.ch {
409410
',' { self.bump(); }
410-
']' {
411-
self.bump();
412-
self.parse_whitespace();
413-
ret ok(list(values));
414-
}
411+
']' { self.bump(); ret ok(list(values)); }
415412
_ { ret self.error("expecting ',' or ']'"); }
416413
}
417414
}
@@ -427,7 +424,6 @@ impl parser for parser {
427424

428425
if self.ch == '}' {
429426
self.bump();
430-
self.parse_whitespace();
431427
ret ok(dict(values));
432428
}
433429

@@ -459,11 +455,7 @@ impl parser for parser {
459455

460456
alt self.ch {
461457
',' { self.bump(); }
462-
'}' {
463-
self.bump();
464-
self.parse_whitespace();
465-
ret ok(dict(values));
466-
}
458+
'}' { self.bump(); ret ok(dict(values)); }
467459
_ {
468460
if self.eof() { break; }
469461
ret self.error("expecting ',' or '}'");
@@ -637,6 +629,9 @@ mod tests {
637629
assert from_str("null") == ok(null);
638630
assert from_str("true") == ok(boolean(true));
639631
assert from_str("false") == ok(boolean(false));
632+
assert from_str(" null ") == ok(null);
633+
assert from_str(" true ") == ok(boolean(true));
634+
assert from_str(" false ") == ok(boolean(false));
640635
}
641636

642637
#[test]
@@ -664,6 +659,7 @@ mod tests {
664659
assert from_str("0.4e5") == ok(num(0.4e5f));
665660
assert from_str("0.4e+15") == ok(num(0.4e15f));
666661
assert from_str("0.4e-01") == ok(num(0.4e-01f));
662+
assert from_str(" 3 ") == ok(num(3f));
667663
}
668664

669665
#[test]
@@ -680,6 +676,7 @@ mod tests {
680676
assert from_str("\"\\n\"") == ok(string("\n"));
681677
assert from_str("\"\\r\"") == ok(string("\r"));
682678
assert from_str("\"\\t\"") == ok(string("\t"));
679+
assert from_str(" \"foo\" ") == ok(string("foo"));
683680
}
684681

685682
#[test]

0 commit comments

Comments
 (0)