| ... | ... | @@ -328,17 +328,24 @@ pub fn readVecLimit(r: *Reader, data: []const []u8, limit: Limit) Error!usize { |
| 328 | 328 | }; |
| 329 | 329 | var n = r.vtable.stream(r, &wrapper.writer, .limited(remaining)) catch |err| switch (err) { |
| 330 | 330 | error.WriteFailed => { |
| 331 | assert(!wrapper.used); |
| 331 | 332 | if (wrapper.writer.buffer.ptr == first.ptr) { |
| 332 | 333 | remaining -= wrapper.writer.end; |
| 333 | 334 | } else { |
| 335 | assert(wrapper.writer.end <= r.buffer.len); |
| 334 | 336 | r.end = wrapper.writer.end; |
| 335 | 337 | } |
| 336 | 338 | break; |
| 337 | 339 | }, |
| 338 | 340 | else => |e| return e, |
| 339 | 341 | }; |
| 340 | | if (wrapper.writer.buffer.ptr != first.ptr) { |
| 341 | | r.end = n; |
| 342 | if (!wrapper.used) { |
| 343 | if (wrapper.writer.buffer.ptr == first.ptr) { |
| 344 | remaining -= n; |
| 345 | } else { |
| 346 | assert(n <= r.buffer.len); |
| 347 | r.end = n; |
| 348 | } |
| 342 | 349 | break; |
| 343 | 350 | } |
| 344 | 351 | if (n < first.len) { |
| ... | ... | @@ -355,6 +362,7 @@ pub fn readVecLimit(r: *Reader, data: []const []u8, limit: Limit) Error!usize { |
| 355 | 362 | remaining -= mid.len; |
| 356 | 363 | n -= mid.len; |
| 357 | 364 | } |
| 365 | assert(n <= r.buffer.len); |
| 358 | 366 | r.end = n; |
| 359 | 367 | break; |
| 360 | 368 | } |
| ... | ... | @@ -596,12 +604,11 @@ pub fn readSliceShort(r: *Reader, buffer: []u8) ShortError!usize { |
| 596 | 604 | }; |
| 597 | 605 | const n = r.vtable.stream(r, &wrapper.writer, .unlimited) catch |err| switch (err) { |
| 598 | 606 | error.WriteFailed => { |
| 599 | | if (wrapper.writer.buffer.ptr != remaining.ptr) { |
| 607 | if (!wrapper.used) { |
| 600 | 608 | assert(r.seek == 0); |
| 601 | 609 | r.seek = remaining.len; |
| 602 | 610 | r.end = wrapper.writer.end; |
| 603 | 611 | @memcpy(remaining, r.buffer[0..remaining.len]); |
| 604 | | return buffer.len; |
| 605 | 612 | } |
| 606 | 613 | return buffer.len; |
| 607 | 614 | }, |