authorgravatar for mpoliwczak34@gmail.comMateusz Poliwczak <mpoliwczak34@gmail.com> 2023-03-23 18:01:21+01:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-03-23 22:52:15+02:00
log4d31e3c917a05541394c544708f0047cfb53331a
tree499e02d0091223407283320f85bf6bddbafdb053
parent38ee46dda31101f349ea9eee762908f924fd384c

std.base64: don't overflow dest with padding


1 files changed, 15 insertions(+), 1 deletions(-)

lib/std/base64.zig+15-1
......@@ -117,7 +117,7 @@ pub const Base64Encoder = struct {
117117 out_idx += 1;
118118 }
119119 if (encoder.pad_char) |pad_char| {
120 for (dest[out_idx..]) |*pad| {
120 for (dest[out_idx..out_len]) |*pad| {
121121 pad.* = pad_char;
122122 }
123123 }
......@@ -305,6 +305,20 @@ test "base64" {
305305 comptime try testAllApis(standard, "comptime", "Y29tcHRpbWU=");
306306}
307307
308test "base64 padding dest overflow" {
309 const input = "foo";
310
311 var expect: [128]u8 = undefined;
312 std.mem.set(u8, &expect, 0);
313 _ = url_safe.Encoder.encode(expect[0..url_safe.Encoder.calcSize(input.len)], input);
314
315 var got: [128]u8 = undefined;
316 std.mem.set(u8, &got, 0);
317 _ = url_safe.Encoder.encode(&got, input);
318
319 try std.testing.expectEqualSlices(u8, &expect, &got);
320}
321
308322test "base64 url_safe_no_pad" {
309323 @setEvalBranchQuota(8000);
310324 try testBase64UrlSafeNoPad();