AK+LibJS: Use simdutf for all base64 operations

We were previously unable to use simdutf for base64 decoding operations
other than "loose". Upstream has added support for the "strict" and
"stop-before-partial" operations, so let's make use of them!
This commit is contained in:
Timothy Flynn 2025-05-03 07:08:26 -04:00 committed by Tim Flynn
commit 8a80ff7b3b
Notes: github-actions[bot] 2025-05-03 15:22:03 +00:00
6 changed files with 88 additions and 370 deletions

View file

@ -40,25 +40,25 @@ describe("errors", () => {
test("invalid padding", () => {
expect(() => {
Uint8Array.fromBase64("Zm9v=", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Unexpected padding character");
}).toThrowWithMessage(SyntaxError, "Invalid trailing data");
expect(() => {
Uint8Array.fromBase64("Zm9vaa=", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Incomplete number of padding characters");
}).toThrowWithMessage(SyntaxError, "Invalid trailing data");
expect(() => {
Uint8Array.fromBase64("Zm9vaa=a", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Unexpected padding character");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
});
test("invalid alphabet", () => {
expect(() => {
Uint8Array.fromBase64("-", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Invalid character '-'");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
expect(() => {
Uint8Array.fromBase64("+", { alphabet: "base64url", lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Invalid character '+'");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
});
test("overlong chunk", () => {

View file

@ -79,28 +79,28 @@ describe("errors", () => {
test("invalid padding", () => {
expect(() => {
new Uint8Array(10).setFromBase64("Zm9v=", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Unexpected padding character");
}).toThrowWithMessage(SyntaxError, "Invalid trailing data");
expect(() => {
new Uint8Array(10).setFromBase64("Zm9vaa=", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Incomplete number of padding characters");
}).toThrowWithMessage(SyntaxError, "Invalid trailing data");
expect(() => {
new Uint8Array(10).setFromBase64("Zm9vaa=a", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Unexpected padding character");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
});
test("invalid alphabet", () => {
expect(() => {
new Uint8Array(10).setFromBase64("-", { lastChunkHandling: "strict" });
}).toThrowWithMessage(SyntaxError, "Invalid character '-'");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
expect(() => {
new Uint8Array(10).setFromBase64("+", {
alphabet: "base64url",
lastChunkHandling: "strict",
});
}).toThrowWithMessage(SyntaxError, "Invalid character '+'");
}).toThrowWithMessage(SyntaxError, "Invalid base64 character");
});
test("overlong chunk", () => {