authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-16 08:22:49+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-16 08:22:49+02:00
logfc78a22b96035b023c4fb138baee0ac9dcc4c42b
tree451a8e6c2398ef576cfea560df29cefeafc4b521
parentbd51e91a9a934c915219b985549bb4fc060c0357
parent9ae66b7d1a83474010bc3612c5b22c85526c85fd

Merge pull request 'std.base64: fix bogus decoderWithIgnore() definitions' (#37093) from jedisct1/zig:base64fix into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37093

1 files changed, 22 insertions(+), 2 deletions(-)

lib/std/base64.zig+22-2
......@@ -31,6 +31,9 @@ pub const standard_alphabet_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopq
3131fn standardBase64DecoderWithIgnore(ignore: []const u8) Base64DecoderWithIgnore {
3232 return Base64DecoderWithIgnore.init(standard_alphabet_chars, '=', ignore);
3333}
34fn standardNoPadBase64DecoderWithIgnore(ignore: []const u8) Base64DecoderWithIgnore {
35 return Base64DecoderWithIgnore.init(standard_alphabet_chars, null, ignore);
36}
3437
3538/// Standard Base64 codecs, with padding, as defined in
3639/// [RFC 4648 section 4](https://datatracker.ietf.org/doc/html/rfc4648#section-4).
......@@ -47,7 +50,7 @@ pub const standard = Codecs{
4750pub const standard_no_pad = Codecs{
4851 .alphabet_chars = standard_alphabet_chars,
4952 .pad_char = null,
50 .decoderWithIgnore = standardBase64DecoderWithIgnore,
53 .decoderWithIgnore = standardNoPadBase64DecoderWithIgnore,
5154 .Encoder = Base64Encoder.init(standard_alphabet_chars, null),
5255 .Decoder = Base64Decoder.init(standard_alphabet_chars, null),
5356};
......@@ -56,6 +59,9 @@ pub const standard_no_pad = Codecs{
5659/// [RFC 4648 section 5](https://datatracker.ietf.org/doc/html/rfc4648#section-5).
5760pub const url_safe_alphabet_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".*;
5861fn urlSafeBase64DecoderWithIgnore(ignore: []const u8) Base64DecoderWithIgnore {
62 return Base64DecoderWithIgnore.init(url_safe_alphabet_chars, '=', ignore);
63}
64fn urlSafeNoPadBase64DecoderWithIgnore(ignore: []const u8) Base64DecoderWithIgnore {
5965 return Base64DecoderWithIgnore.init(url_safe_alphabet_chars, null, ignore);
6066}
6167
......@@ -74,7 +80,7 @@ pub const url_safe = Codecs{
7480pub const url_safe_no_pad = Codecs{
7581 .alphabet_chars = url_safe_alphabet_chars,
7682 .pad_char = null,
77 .decoderWithIgnore = urlSafeBase64DecoderWithIgnore,
83 .decoderWithIgnore = urlSafeNoPadBase64DecoderWithIgnore,
7884 .Encoder = Base64Encoder.init(url_safe_alphabet_chars, null),
7985 .Decoder = Base64Decoder.init(url_safe_alphabet_chars, null),
8086};
......@@ -401,6 +407,20 @@ test "base64 url_safe_no_pad" {
401407 try comptime testAllApis(url_safe_no_pad, "comptime", "Y29tcHRpbWU");
402408}
403409
410test "base64 standard_no_pad" {
411 @setEvalBranchQuota(8000);
412 try testAllApis(standard_no_pad, "f", "Zg");
413 try comptime testAllApis(standard_no_pad, "comptime", "Y29tcHRpbWU");
414 try testError(standard_no_pad, "Zg==", error.InvalidCharacter);
415}
416
417test "base64 url_safe" {
418 @setEvalBranchQuota(8000);
419 try testAllApis(url_safe, "f", "Zg==");
420 try comptime testAllApis(url_safe, "comptime", "Y29tcHRpbWU=");
421 try testError(url_safe, "Zg", error.InvalidPadding);
422}
423
404424fn testBase64() !void {
405425 const codecs = standard;
406426