Repository: LadybirdBrowser/ladybird
File: Libraries/LibWeb/CSS/Parser/Helpers.cpp (C++)

Code before:
{
    // https://drafts.csswg.org/css-syntax/#determine-the-fallback-encoding
    auto determine_the_fallback_encoding = [&mime_type_charset, &environment_encoding, &encoded_string]() -> StringView {
        // 1. If HTTP or equivalent protocol provides an encoding label (e.g. via the charset parameter of the Content-Type header) for the stylesheet,
        //    get an encoding from encoding label. If that does not return failure, return it.
        if (mime_type_charset.has_value()) {
            if (auto encoding = TextCodec::get_standardized_encoding(mime_type_charset.value()); encoding.has_value())
                return encoding.value();
        }
        // 2. Otherwise, check stylesheet’s byte stream. If the first 1024 bytes of the stream begin with the hex sequence
        // 40 63 68 61 72 73 65 74 20 22 XX* 22 3B
        // where each XX byte is a value between 0x16 and 0x21 inclusive or a value between 0x23 and 0x7F inclusive, then get an encoding from a string formed out of the sequence of XX bytes, interpreted as ASCII.
        auto check_stylesheets_byte_stream = [&encoded_string]() -> Optional<StringView> {
            size_t scan_length = min(encoded_string.size(), 1024);
            auto pattern_start = "@charset \""sv;
            auto pattern_end = "\";"sv;

            if (scan_length < pattern_start.length())
                return {};

            StringView start_view(encoded_string.data(), pattern_start.length());
            if (start_view != pattern_start)
                return {};

            auto encoding_start = pattern_start.length();
            StringView buffer_view(encoded_string.data(), scan_length);
            auto end_index = buffer_view.find(pattern_end, encoding_start);
            if (!end_index.has_value())
                return {};

            size_t encoding_length = end_index.value() - encoding_start;
            auto encoding_view = buffer_view.substring_view(encoding_start, encoding_length);

            for (char c : encoding_view) {
                u8 byte = static_cast<u8>(c);
                if ((byte < 0x01 || byte > 0x21) && (byte < 0x23 || byte > 0x7F)) {
                    return {};
                }
            }

            return encoding_view;
        };
        // If the return value was utf-16be or utf-16le, return utf-8; if it was anything else except failure, return it.
        auto byte_stream_value = check_stylesheets_byte_stream();
        if (byte_stream_value.has_value() && (byte_stream_value->equals_ignoring_ascii_case("utf-16be"sv) || byte_stream_value->equals_ignoring_ascii_case("utf-16le"sv)))
            return "utf-8"sv;
        if (byte_stream_value.has_value())
            return byte_stream_value.value();

        // 3. Otherwise, if an environment encoding is provided by the referring document, return it.
        if (environment_encoding.has_value())

Review comment (suggestion):
This feels a bit dangerous, and we have more type-safe ways of doing it:
- `encoded_string.bytes()` returns a Bytes, which is a view onto the data (no copies)
- ...which you can get the first 1024 chars of with `.slice(start, length)`
- ...and then you can construct a `StringView` directly from that.

Code after:
{
    // https://drafts.csswg.org/css-syntax/#determine-the-fallback-encoding
    auto determine_the_fallback_encoding = [&mime_type_charset, &environment_encoding, &encoded_string]() -> StringView {
        // 1. If HTTP or equivalent protocol provides an encoding label (e.g. via the charset parameter of the Content-Type header) for the stylesheet,
        //    get an encoding from encoding label. If that does not return failure, return it.
        if (mime_type_charset.has_value()) {
            if (auto encoding = TextCodec::get_standardized_encoding(mime_type_charset.value()); encoding.has_value())
                return encoding.value();
        }
        // 2. Otherwise, check stylesheet’s byte stream. If the first 1024 bytes of the stream begin with the hex sequence
        // 40 63 68 61 72 73 65 74 20 22 XX* 22 3B
        // where each XX byte is a value between 0x16 and 0x21 inclusive or a value between 0x23 and 0x7F inclusive,
        // then get an encoding from a string formed out of the sequence of XX bytes, interpreted as ASCII.
        auto check_stylesheets_byte_stream = [&encoded_string]() -> Optional<StringView> {
            size_t scan_length = min(encoded_string.size(), 1024);
            auto pattern_start = "@charset \""sv;
            auto pattern_end = "\";"sv;

            if (scan_length < pattern_start.length())
                return {};

            StringView buffer_view = encoded_string.bytes().slice(0, scan_length);
            if (!buffer_view.starts_with(pattern_start))
                return {};

            auto encoding_start = pattern_start.length();
            auto end_index = buffer_view.find(pattern_end, encoding_start);
            if (!end_index.has_value())
                return {};

            size_t encoding_length = end_index.value() - encoding_start;
            auto encoding_view = buffer_view.substring_view(encoding_start, encoding_length);

            for (char c : encoding_view) {
                u8 byte = static_cast<u8>(c);
                if ((byte < 0x01 || byte > 0x21) && (byte < 0x23 || byte > 0x7F)) {
                    return {};
                }
            }

            return TextCodec::get_standardized_encoding(encoding_view);
        };
        // If the return value was utf-16be or utf-16le, return utf-8; if it was anything else except failure, return it.
        auto byte_stream_value = check_stylesheets_byte_stream();
        if (byte_stream_value.has_value() && (byte_stream_value == "UTF-16BE"sv || byte_stream_value == "UTF-16LE"))
            return "utf-8"sv;
        if (byte_stream_value.has_value())
            return byte_stream_value.value();

        // 3. Otherwise, if an environment encoding is provided by the referring document, return it.
        if (environment_encoding.has_value())