authorgravatar for truemedian@gmail.comNameless <truemedian@gmail.com> 2023-10-25 01:30:24-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-10-25 09:30:24+03:00
log6c9d34bce703b80562d86d08b71a92910fce1e46
tree0f74fd396dd18c356b544b08690fa9172a5c6816
parent22a6a5d93f000afd7e00450bb5a359f39bb598bf
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

std.Uri: prevent crash with strange authority section


1 files changed, 4 insertions(+), 0 deletions(-)

lib/std/Uri.zig+4
......@@ -171,6 +171,9 @@ pub fn parseWithoutScheme(text: []const u8) ParseError!Uri {
171171 }
172172 }
173173
174 // only possible if uri consists of only `userinfo@`
175 if (start_of_host >= authority.len) break :a;
176
174177 var end_of_host: usize = authority.len;
175178
176179 if (authority[start_of_host] == '[') { // IPv6
......@@ -565,6 +568,7 @@ test "authority" {
565568 try std.testing.expectEqualSlices(u8, "hostname", (try parse("scheme://userinfo@hostname")).host.?);
566569 try std.testing.expectEqualSlices(u8, "userinfo", (try parse("scheme://userinfo@hostname")).user.?);
567570 try std.testing.expectEqual(@as(?[]const u8, null), (try parse("scheme://userinfo@hostname")).password);
571 try std.testing.expectEqual(@as(?[]const u8, null), (try parse("scheme://userinfo@")).host);
568572
569573 try std.testing.expectEqualSlices(u8, "hostname", (try parse("scheme://user:password@hostname")).host.?);
570574 try std.testing.expectEqualSlices(u8, "user", (try parse("scheme://user:password@hostname")).user.?);