╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ─────────────────╮ │src/serve_ssh_protocol.zig│ ╰──────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────╮ │1975 │ │1976 if (std.mem.eql(u8, req_type, "exec")) { │ │1977 // capture the command string for the handler to inspect│ │2013 - const cmd = try takeStringField(allocator, &r, 4096); │ │2014 - if (pending_exec.*) |old| allocator.free(old); │ │2015 - pending_exec.* = cmd; │ │1978 + const cmd = try takeString(&r, 4096); │ │1979 try replyChannelRequest(conn, ch, want_reply, true); │ │1980 return .{ .exec = cmd }; │ │1981 } │ ╰──────────────────────────────────────────────────────────────────────╯ ╭ changed ───────╮ │src/test/ssh.zig│ ╰────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────╮ │364 try std.testing.expectEqual(@as(u8, proto.SSH_MSG_KEX_ECDH_REPLY), ecdh_reply[0]);│ │365 │ │366 var server_eph_pub: [X25519.public_length]u8 = undefined; │ │367 - var k_s: []u8 = undefined; │ │368 - var sig_blob: []u8 = undefined; │ │367 + var k_s: []const u8 = undefined; │ │368 + var sig_blob: []const u8 = undefined; │ │369 { │ │370 var r = std.Io.Reader.fixed(ecdh_reply[1..]); │ │371 - k_s = try proto.takeStringField(allocator, &r, 4096); │ │372 - errdefer allocator.free(k_s); │ │373 - const q_s = try proto.takeStringField(allocator, &r, X25519.public_length); │ │374 - defer allocator.free(q_s); │ │371 + k_s = try proto.takeString(&r, 4096); │ │372 + const q_s = try proto.takeString(&r, X25519.public_length); │ │373 try std.testing.expectEqual(X25519.public_length, q_s.len); │ │374 @memcpy(&server_eph_pub, q_s); │ │377 - sig_blob = try proto.takeStringField(allocator, &r, 1024); │ │375 + sig_blob = try proto.takeString(&r, 1024); │ │376 } │ │379 - defer allocator.free(k_s); │ │380 - defer allocator.free(sig_blob); │ │377 │ │378 // K_S must be the host's ed25519 pubkey we configured. │ │379 var expected_k_s: std.ArrayList(u8) = .empty; │ ╰───────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │391 // verify the host signature on H. │ │392 { │ │393 var r = std.Io.Reader.fixed(sig_blob); │ │398 - const algo = try proto.takeStringField(allocator, &r, 64); │ │399 - defer allocator.free(algo); │ │394 + const algo = try proto.takeString(&r, 64); │ │395 try std.testing.expectEqualStrings("ssh-ed25519", algo); │ │401 - const raw_sig = try proto.takeStringField(allocator, &r, Ed25519.Signature.encoded_length);│ │402 - defer allocator.free(raw_sig); │ │396 + const raw_sig = try proto.takeString(&r, Ed25519.Signature.encoded_length); │ │397 var sig_bytes: [Ed25519.Signature.encoded_length]u8 = undefined; │ │398 @memcpy(&sig_bytes, raw_sig); │ │399 const sig = Ed25519.Signature.fromBytes(sig_bytes); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │570 proto.SSH_MSG_CHANNEL_REQUEST => { │ │571 var r = std.Io.Reader.fixed(pkt[1..]); │ │572 _ = try r.takeInt(u32, .big); │ │579 - const req_type = try proto.takeStringField(allocator, &r, 64);│ │580 - defer allocator.free(req_type); │ │573 + const req_type = try proto.takeString(&r, 64); │ │574 if (std.mem.eql(u8, req_type, "exit-status")) { │ │575 _ = try r.takeByte(); │ │576 const status = try r.takeInt(u32, .big); │ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │683 const reply = try proto.readPlainPacket(allocator, cr); │ │684 defer allocator.free(reply); │ │685 var rr = std.Io.Reader.fixed(reply[1..]); │ │693 - const k_s = try proto.takeStringField(allocator, &rr, 4096); │ │694 - defer allocator.free(k_s); │ │695 - const q_s = try proto.takeStringField(allocator, &rr, X25519.public_length); │ │696 - defer allocator.free(q_s); │ │686 + const k_s = try proto.takeString(&rr, 4096); │ │687 + const q_s = try proto.takeString(&rr, X25519.public_length); │ │688 var server_pub: [X25519.public_length]u8 = undefined; │ │689 @memcpy(&server_pub, q_s); │ │699 - const sig_blob = try proto.takeStringField(allocator, &rr, 1024); │ │700 - defer allocator.free(sig_blob); │ │690 + _ = try proto.takeString(&rr, 1024); │ │691 const k = try X25519.scalarmult(eph.secret_key, server_pub); │ │692 const exchange = try proto.computeExchangeHash(allocator, client_version, v_s, ckex, skex, k_s, &eph.public_key, &server_pub, &k, false);│ │693 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────╮ │729 defer allocator.free(accept); │ │730 try std.testing.expectEqual(@as(u8, proto.SSH_MSG_SERVICE_ACCEPT), accept[0]);│ │731 var r = std.Io.Reader.fixed(accept[1..]); │ │742 - const service = try proto.takeStringField(allocator, &r, 64); │ │743 - defer allocator.free(service); │ │732 + const service = try proto.takeString(&r, 64); │ │733 try std.testing.expectEqualStrings("ssh-userauth", service); │ │734 } │ │735 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │755 defer allocator.free(pk_ok); │ │756 try std.testing.expectEqual(@as(u8, proto.SSH_MSG_USERAUTH_PK_OK), pk_ok[0]);│ │757 var r = std.Io.Reader.fixed(pk_ok[1..]); │ │769 - const algo = try proto.takeStringField(allocator, &r, 64); │ │770 - defer allocator.free(algo); │ │758 + const algo = try proto.takeString(&r, 64); │ │759 try std.testing.expectEqualStrings("ssh-ed25519", algo); │ │772 - const accepted_blob = try proto.takeStringField(allocator, &r, 4096); │ │773 - defer allocator.free(accepted_blob); │ │760 + const accepted_blob = try proto.takeString(&r, 4096); │ │761 try std.testing.expectEqualSlices(u8, pubkey_blob.items, accepted_blob); │ │762 } │ │763 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯