aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMatthew Borkowski <matthew.h.borkowski@gmail.com>2021-05-13 05:11:28 -0400
committerGitHub <noreply@github.com>2021-05-13 11:11:28 +0200
commite902c19c0e2bf7f0e9bc83b2c58d19ec024d56db (patch)
treede1f648b1339d0c01e799d9d40e7fb602b282b8a /lib
parent4f71852c103f8dbf6ce78b36e5abd41a0c4ccf06 (diff)
downloadzig-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.zig9
-rw-r--r--lib/std/json/test.zig6
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" {