Skip to content

Commit 14f1137

Browse files
ianprime0509andrewrk
authored andcommitted
Fetch.git: fix FetchStream packet reading
Progress towards ziglang#24732
1 parent df46ee6 commit 14f1137

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/Package/Fetch/git.zig

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,17 @@ pub const Packet = union(enum) {
595595

596596
/// Reads a packet in pkt-line format.
597597
fn read(reader: *std.Io.Reader) !Packet {
598+
const packet: Packet = try .peek(reader);
599+
switch (packet) {
600+
.data => |data| reader.toss(data.len),
601+
else => {},
602+
}
603+
return packet;
604+
}
605+
606+
/// Consumes the header of a pkt-line packet and reads any associated data
607+
/// into the reader's buffer, but does not consume the data.
608+
fn peek(reader: *std.Io.Reader) !Packet {
598609
const length = std.fmt.parseUnsigned(u16, try reader.take(4), 16) catch return error.InvalidPacket;
599610
switch (length) {
600611
0 => return .flush,
@@ -603,7 +614,7 @@ pub const Packet = union(enum) {
603614
3 => return error.InvalidPacket,
604615
else => if (length - 4 > max_data_length) return error.InvalidPacket,
605616
}
606-
return .{ .data = try reader.take(length - 4) };
617+
return .{ .data = try reader.peek(length - 4) };
607618
}
608619

609620
/// Writes a packet in pkt-line format.
@@ -1088,15 +1099,15 @@ pub const Session = struct {
10881099
const input = fs.input;
10891100
if (fs.remaining_len == 0) {
10901101
while (true) {
1091-
switch (Packet.read(input) catch |err| {
1102+
switch (Packet.peek(input) catch |err| {
10921103
fs.err = err;
10931104
return error.ReadFailed;
10941105
}) {
10951106
.flush => return error.EndOfStream,
10961107
.data => |data| if (data.len > 1) switch (@as(StreamCode, @enumFromInt(data[0]))) {
10971108
.pack_data => {
1098-
try input.discardAll(1);
1099-
fs.remaining_len = data.len;
1109+
input.toss(1);
1110+
fs.remaining_len = data.len - 1;
11001111
break;
11011112
},
11021113
.fatal_error => {

0 commit comments

Comments
 (0)