feat: use a dynamic buffer to prohibit error.Overflow in jsonScanUntil
Also, clean-up the definition of CborJsonError
This commit is contained in:
parent
ae54c014aa
commit
95d31a7697
1 changed files with 7 additions and 11 deletions
18
src/cbor.zig
18
src/cbor.zig
|
@ -18,19 +18,13 @@ pub const CborError = error{
|
||||||
OutOfMemory,
|
OutOfMemory,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const CborJsonError = error{
|
pub const CborJsonError = (CborError || error{
|
||||||
BufferUnderrun,
|
BufferUnderrun,
|
||||||
CborIntegerTooLarge,
|
|
||||||
CborIntegerTooSmall,
|
|
||||||
CborInvalidType,
|
|
||||||
CborTooShort,
|
|
||||||
CborUnsupportedType,
|
CborUnsupportedType,
|
||||||
NoSpaceLeft,
|
NoSpaceLeft,
|
||||||
OutOfMemory,
|
|
||||||
Overflow,
|
|
||||||
SyntaxError,
|
SyntaxError,
|
||||||
UnexpectedEndOfInput,
|
UnexpectedEndOfInput,
|
||||||
};
|
});
|
||||||
|
|
||||||
const cbor_magic_null: u8 = 0xf6;
|
const cbor_magic_null: u8 = 0xf6;
|
||||||
const cbor_magic_true: u8 = 0xf5;
|
const cbor_magic_true: u8 = 0xf5;
|
||||||
|
@ -1003,7 +997,9 @@ fn writeJsonValue(writer: anytype, value: json.Value) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn jsonScanUntil(writer: anytype, scanner: *json.Scanner, end_token: anytype) CborJsonError!usize {
|
fn jsonScanUntil(writer: anytype, scanner: *json.Scanner, end_token: anytype) CborJsonError!usize {
|
||||||
var partial = try std.BoundedArray(u8, 4096).init(0);
|
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||||
|
defer arena.deinit();
|
||||||
|
var partial = std.ArrayList(u8).init(arena.allocator());
|
||||||
var count: usize = 0;
|
var count: usize = 0;
|
||||||
|
|
||||||
var token = try scanner.next();
|
var token = try scanner.next();
|
||||||
|
@ -1019,7 +1015,7 @@ fn jsonScanUntil(writer: anytype, scanner: *json.Scanner, end_token: anytype) Cb
|
||||||
|
|
||||||
.number => |v| {
|
.number => |v| {
|
||||||
try partial.appendSlice(v);
|
try partial.appendSlice(v);
|
||||||
try writeJsonValue(writer, json.Value.parseFromNumberSlice(partial.slice()));
|
try writeJsonValue(writer, json.Value.parseFromNumberSlice(partial.items));
|
||||||
try partial.resize(0);
|
try partial.resize(0);
|
||||||
},
|
},
|
||||||
.partial_number => |v| {
|
.partial_number => |v| {
|
||||||
|
@ -1029,7 +1025,7 @@ fn jsonScanUntil(writer: anytype, scanner: *json.Scanner, end_token: anytype) Cb
|
||||||
|
|
||||||
.string => |v| {
|
.string => |v| {
|
||||||
try partial.appendSlice(v);
|
try partial.appendSlice(v);
|
||||||
try writeString(writer, partial.slice());
|
try writeString(writer, partial.items);
|
||||||
try partial.resize(0);
|
try partial.resize(0);
|
||||||
},
|
},
|
||||||
.partial_string => |v| {
|
.partial_string => |v| {
|
||||||
|
|
Loading…
Add table
Reference in a new issue