diff --git a/AK/Base64.cpp b/AK/Base64.cpp index 661d9c53ee..006eeebf1d 100644 --- a/AK/Base64.cpp +++ b/AK/Base64.cpp @@ -61,7 +61,7 @@ ByteBuffer decode_base64(const StringView& input) *is_padding = true; return 0; } - return table[input[offset]]; + return table[static_cast(input[offset])]; }; Vector output; diff --git a/Tests/AK/TestBase64.cpp b/Tests/AK/TestBase64.cpp index 3e4baa372b..95a90d06c7 100644 --- a/Tests/AK/TestBase64.cpp +++ b/Tests/AK/TestBase64.cpp @@ -27,6 +27,14 @@ TEST_CASE(test_decode) decode_equal("Zm9vYmFy", "foobar"); } +TEST_CASE(test_decode_nocrash) +{ + // Any output is fine, we only check that we don't crash here. + decode_base64(StringView("asdf\xffqwer")); + decode_base64(StringView("asdf\x80qwer")); + // TODO: Handle decoding failure. +} + TEST_CASE(test_encode) { auto encode_equal = [&](const char* input, const char* expected) {