diff options
| author | xackus <14938807+xackus@users.noreply.github.com> | 2019-10-27 10:45:54 +0100 |
|---|---|---|
| committer | xackus <14938807+xackus@users.noreply.github.com> | 2019-10-27 10:45:54 +0100 |
| commit | a0abd3be85a6c24a913ee650e1fd51bf3f457c68 (patch) | |
| tree | a2289356723223a1eddeb65cb7277209dbd81d76 /lib/std/json.zig | |
| parent | 05003d533a8a4f4c49f7a251e26b5dfff5f278b3 (diff) | |
| download | zig-a0abd3be85a6c24a913ee650e1fd51bf3f457c68.tar.gz zig-a0abd3be85a6c24a913ee650e1fd51bf3f457c68.zip | |
fix json parser crashing on empty input
remove unreachable code
Diffstat (limited to 'lib/std/json.zig')
| -rw-r--r-- | lib/std/json.zig | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/std/json.zig b/lib/std/json.zig index 07916ff842..876fae955e 100644 --- a/lib/std/json.zig +++ b/lib/std/json.zig @@ -867,6 +867,8 @@ pub const TokenStream = struct { parser: StreamingParser, token: ?Token, + pub const Error = StreamingParser.Error || error.Incomplete; + pub fn init(slice: []const u8) TokenStream { return TokenStream{ .i = 0, @@ -896,16 +898,11 @@ pub const TokenStream = struct { } } - if (self.i > self.slice.len) { - try self.parser.feed(' ', &t1, &t2); - self.i += 1; - - if (t1) |token| { - return token; - } + if(self.parser.complete){ + return null; + } else { + return error.Incomplete; } - - return null; } }; @@ -1455,3 +1452,9 @@ test "write json then parse it" { testing.expect(tree.root.Object.get("array").?.value.Array.at(1).Float == 12.34); testing.expect(mem.eql(u8, tree.root.Object.get("str").?.value.String, "hello")); } + +test "parsing empty string does not crash" { + var p = Parser.init(debug.global_allocator, false); + defer p.deinit(); + testing.expectError(error.Incomplete, p.parse("")); +} |
