File tree Expand file tree Collapse file tree 1 file changed +15
-1
lines changed Expand file tree Collapse file tree 1 file changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -406,7 +406,10 @@ pub fn readVec(r: *Reader, data: [][]u8) Error!usize {
406
406
r .seek = seek ;
407
407
data [i ] = buf [copy_len .. ];
408
408
defer data [i ] = buf ;
409
- return n + try r .vtable .readVec (r , data [i .. ]);
409
+ return n + (r .vtable .readVec (r , data [i .. ]) catch | err | switch (err ) {
410
+ error .EndOfStream = > if (n == 0 ) return error .EndOfStream else 0 ,
411
+ error .ReadFailed = > return error .ReadFailed ,
412
+ });
410
413
}
411
414
const n = seek - r .seek ;
412
415
r .seek = seek ;
@@ -1657,6 +1660,17 @@ test "expected error.EndOfStream" {
1657
1660
try std .testing .expectError (error .EndOfStream , r .take (3 ));
1658
1661
}
1659
1662
1663
+ test "readVec at end" {
1664
+ var reader_buffer : [8 ]u8 = "abcd1234" .* ;
1665
+ var reader : testing.Reader = .init (& reader_buffer , &.{});
1666
+ reader .interface .end = reader_buffer .len ;
1667
+
1668
+ var out : [16 ]u8 = undefined ;
1669
+ var vecs : [1 ][]u8 = .{& out };
1670
+ try testing .expectEqual (8 , try reader .interface .readVec (& vecs ));
1671
+ try testing .expectEqualStrings ("abcd1234" , vecs [0 ][0.. 8]);
1672
+ }
1673
+
1660
1674
fn endingStream (r : * Reader , w : * Writer , limit : Limit ) StreamError ! usize {
1661
1675
_ = r ;
1662
1676
_ = w ;
You can’t perform that action at this time.
0 commit comments