Skip to content

Commit a31fbd3

Browse files
Pix-xiPjinzhongjia
authored andcommitted
fix: write array len after array16 && array32 header definitions
1 parent 585bb37 commit a31fbd3

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/msgpack.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,8 +837,10 @@ pub fn Pack(
837837
try self.writeU8Value(header);
838838
} else if (len <= 0xffff) {
839839
try self.writeTypeMarker(.ARRAY16);
840+
try self.writeU16Value(@as(u16, @intCast(len)));
840841
} else if (len <= 0xffff_ffff) {
841842
try self.writeTypeMarker(.ARRAY32);
843+
try self.writeU32Value(@as(u32, @intCast(len)));
842844
} else {
843845
return MsGPackError.MAP_LENGTH_TOO_LONG;
844846
}

src/test.zig

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,33 @@ test "array write and read" {
211211
}
212212
}
213213

214+
test "array16 write and read" {
215+
var arr: [0xffff]u8 = std.mem.zeroes([0xffff]u8);
216+
var write_buffer = std.io.fixedBufferStream(&arr);
217+
var read_buffer = std.io.fixedBufferStream(&arr);
218+
var p = pack.init(
219+
&write_buffer,
220+
&read_buffer,
221+
);
222+
const test_val = [16]u8{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
223+
var test_payload = try Payload.arrPayload(16, allocator);
224+
defer test_payload.free(allocator);
225+
226+
for (test_val, 0..) |v, i| {
227+
try test_payload.setArrElement(i, Payload.uintToPayload(v));
228+
}
229+
230+
try p.write(test_payload);
231+
const val = try p.read(allocator);
232+
defer val.free(allocator);
233+
234+
try expect(arr[0] == 0xdc);
235+
for (0..try val.getArrLen()) |i| {
236+
const element = try val.getArrElement(i);
237+
try expect(element.uint == test_val[i]);
238+
}
239+
}
240+
214241
test "ext write and read" {
215242
var arr: [0xffff_f]u8 = std.mem.zeroes([0xffff_f]u8);
216243
var write_buffer = std.io.fixedBufferStream(&arr);

0 commit comments

Comments
 (0)