diff options
| author | Matthew Borkowski <matthew.h.borkowski@gmail.com> | 2021-05-13 05:11:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-13 11:11:28 +0200 |
| commit | e902c19c0e2bf7f0e9bc83b2c58d19ec024d56db (patch) | |
| tree | de1f648b1339d0c01e799d9d40e7fb602b282b8a /lib | |
| parent | 4f71852c103f8dbf6ce78b36e5abd41a0c4ccf06 (diff) | |
| download | zig-e902c19c0e2bf7f0e9bc83b2c58d19ec024d56db.tar.gz zig-e902c19c0e2bf7f0e9bc83b2c58d19ec024d56db.zip | |
std/json: Fix premature closing brace being considered valid JSON
return error from StreamingParser when reading closing brace when expecting value for an object key
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/json.zig | 9 | ||||
| -rw-r--r-- | lib/std/json/test.zig | 6 |
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/std/json.zig b/lib/std/json.zig index ed26c13229..7515f8682d 100644 --- a/lib/std/json.zig +++ b/lib/std/json.zig @@ -623,7 +623,7 @@ pub const StreamingParser = struct { .ObjectSeparator => switch (c) { ':' => { - p.state = .ValueBegin; + p.state = .ValueBeginNoClosing; p.after_string_state = .ValueEnd; }, 0x09, 0x0A, 0x0D, 0x20 => { @@ -1205,6 +1205,13 @@ test "json.token mismatched close" { try testing.expectError(error.UnexpectedClosingBrace, p.next()); } +test "json.token premature object close" { + var p = TokenStream.init("{ \"key\": }"); + try checkNext(&p, .ObjectBegin); + try checkNext(&p, .String); + try testing.expectError(error.InvalidValueBegin, p.next()); +} + /// Validate a JSON string. This does not limit number precision so a decoder may not necessarily /// be able to decode the string even if this returns true. pub fn validate(s: []const u8) bool { diff --git a/lib/std/json/test.zig b/lib/std/json/test.zig index e37ba72113..027f6acaca 100644 --- a/lib/std/json/test.zig +++ b/lib/std/json/test.zig @@ -76,6 +76,12 @@ test "y_trailing_comma_after_empty" { ); } +test "n_object_closed_missing_value" { + try err( + \\{"a":} + ); +} + //////////////////////////////////////////////////////////////////////////////////////////////////// test "y_array_arraysWithSpaces" { |
