mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-05 01:10:24 +00:00
AK: Skip ASCII validation in {Utf16String,String}::number()
This commit is contained in:
committed by
Andreas Kling
parent
1c04b6da3b
commit
b50ff02da4
Notes:
github-actions[bot]
2025-10-05 09:26:13 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/b50ff02da48 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6396
@@ -55,6 +55,11 @@ String String::from_utf8_without_validation(ReadonlyBytes bytes)
|
||||
return result;
|
||||
}
|
||||
|
||||
String String::from_ascii_without_validation(ReadonlyBytes bytes)
|
||||
{
|
||||
return from_utf8_without_validation(bytes);
|
||||
}
|
||||
|
||||
ErrorOr<String> String::from_utf8(StringView view)
|
||||
{
|
||||
if (!Utf8View { view }.validate())
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
static ErrorOr<String> from_utf8(T&&) = delete;
|
||||
|
||||
[[nodiscard]] static String from_utf8_without_validation(ReadonlyBytes);
|
||||
[[nodiscard]] static String from_ascii_without_validation(ReadonlyBytes);
|
||||
|
||||
static ErrorOr<String> from_string_builder(Badge<StringBuilder>, StringBuilder&);
|
||||
[[nodiscard]] static String from_string_builder_without_validation(Badge<StringBuilder>, StringBuilder&);
|
||||
|
||||
@@ -46,7 +46,7 @@ StringType create_string_from_number(T value)
|
||||
}
|
||||
|
||||
size_t size = buffer + max_digits - ptr;
|
||||
return StringType::from_utf8_without_validation(ReadonlyBytes { ptr, size });
|
||||
return StringType::from_ascii_without_validation(ReadonlyBytes { ptr, size });
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -37,6 +37,21 @@ Utf16String Utf16String::from_utf8_with_replacement_character(StringView utf8_st
|
||||
return builder.to_utf16_string();
|
||||
}
|
||||
|
||||
Utf16String Utf16String::from_ascii_without_validation(ReadonlyBytes ascii_string)
|
||||
{
|
||||
if (ascii_string.size() <= Detail::MAX_SHORT_STRING_BYTE_COUNT) {
|
||||
Utf16String string;
|
||||
string.m_value.short_ascii_string = Detail::ShortString::create_with_byte_count(ascii_string.size());
|
||||
|
||||
auto result = ascii_string.copy_to(string.m_value.short_ascii_string.storage);
|
||||
VERIFY(result == ascii_string.size());
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
return Utf16String { Detail::Utf16StringData::from_ascii(ascii_string) };
|
||||
}
|
||||
|
||||
Utf16String Utf16String::from_utf8_without_validation(StringView utf8_string)
|
||||
{
|
||||
if (utf8_string.length() <= Detail::MAX_SHORT_STRING_BYTE_COUNT && utf8_string.is_ascii()) {
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
}
|
||||
|
||||
static Utf16String from_utf8_without_validation(StringView);
|
||||
static Utf16String from_ascii_without_validation(ReadonlyBytes);
|
||||
|
||||
static Utf16String from_utf16(Utf16View const& utf16_string);
|
||||
|
||||
|
||||
@@ -56,6 +56,14 @@ NonnullRefPtr<Utf16StringData> Utf16StringData::create_from_code_point_iterable(
|
||||
return string;
|
||||
}
|
||||
|
||||
NonnullRefPtr<Utf16StringData> Utf16StringData::from_ascii(ReadonlyBytes ascii_string)
|
||||
{
|
||||
VERIFY_UTF16_LENGTH(ascii_string.size());
|
||||
auto string = create_uninitialized(StorageType::ASCII, ascii_string.size());
|
||||
TypedTransfer<char>::copy(string->m_ascii_data, reinterpret_cast<char const*>(ascii_string.data()), ascii_string.size());
|
||||
return string;
|
||||
}
|
||||
|
||||
NonnullRefPtr<Utf16StringData> Utf16StringData::from_utf8(StringView utf8_string, AllowASCIIStorage allow_ascii_storage)
|
||||
{
|
||||
RefPtr<Utf16StringData> string;
|
||||
|
||||
@@ -31,6 +31,7 @@ public:
|
||||
};
|
||||
|
||||
static NonnullRefPtr<Utf16StringData> from_utf8(StringView, AllowASCIIStorage);
|
||||
static NonnullRefPtr<Utf16StringData> from_ascii(ReadonlyBytes);
|
||||
static NonnullRefPtr<Utf16StringData> from_utf16(Utf16View const&);
|
||||
static NonnullRefPtr<Utf16StringData> from_utf32(Utf32View const&);
|
||||
static NonnullRefPtr<Utf16StringData> from_string_builder(StringBuilder&);
|
||||
|
||||
Reference in New Issue
Block a user