aboutsummaryrefslogtreecommitdiff
path: root/lib/std/json.zig
diff options
context:
space:
mode:
authorxackus <14938807+xackus@users.noreply.github.com>2019-10-27 10:45:54 +0100
committerxackus <14938807+xackus@users.noreply.github.com>2019-10-27 10:45:54 +0100
commita0abd3be85a6c24a913ee650e1fd51bf3f457c68 (patch)
treea2289356723223a1eddeb65cb7277209dbd81d76 /lib/std/json.zig
parent05003d533a8a4f4c49f7a251e26b5dfff5f278b3 (diff)
downloadzig-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.zig21
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(""));
+}