mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-21 15:10:19 +00:00
AK+Meta: Update simdutf to version 5.5.0
Contains many fixes found upstream by fuzzers. Also includes fixes for CPU-specific inconsistencies with null inputs.
This commit is contained in:
parent
ee060ed206
commit
d19b31529f
Notes:
github-actions[bot]
2024-09-19 19:49:50 +00:00
Author: https://github.com/trflynn89 Commit: https://github.com/LadybirdBrowser/ladybird/commit/d19b31529f2 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1451
3 changed files with 1 additions and 29 deletions
|
@ -131,10 +131,6 @@ ErrorOr<void> code_point_to_utf16(Utf16Data& string, u32 code_point, Endianness
|
||||||
|
|
||||||
size_t utf16_code_unit_length_from_utf8(StringView string)
|
size_t utf16_code_unit_length_from_utf8(StringView string)
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (string.is_empty())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return simdutf::utf16_length_from_utf8(string.characters_without_null_termination(), string.length());
|
return simdutf::utf16_length_from_utf8(string.characters_without_null_termination(), string.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,10 +296,6 @@ bool Utf16View::starts_with(Utf16View const& needle) const
|
||||||
|
|
||||||
bool Utf16View::validate() const
|
bool Utf16View::validate() const
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (is_empty())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
switch (m_endianness) {
|
switch (m_endianness) {
|
||||||
case Endianness::Host:
|
case Endianness::Host:
|
||||||
return simdutf::validate_utf16(char_data(), length_in_code_units());
|
return simdutf::validate_utf16(char_data(), length_in_code_units());
|
||||||
|
@ -317,12 +309,6 @@ bool Utf16View::validate() const
|
||||||
|
|
||||||
bool Utf16View::validate(size_t& valid_code_units) const
|
bool Utf16View::validate(size_t& valid_code_units) const
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (is_empty()) {
|
|
||||||
valid_code_units = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto result = [&]() {
|
auto result = [&]() {
|
||||||
switch (m_endianness) {
|
switch (m_endianness) {
|
||||||
case Endianness::Host:
|
case Endianness::Host:
|
||||||
|
@ -341,10 +327,6 @@ bool Utf16View::validate(size_t& valid_code_units) const
|
||||||
|
|
||||||
size_t Utf16View::calculate_length_in_code_points() const
|
size_t Utf16View::calculate_length_in_code_points() const
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (is_empty())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// FIXME: simdutf's code point length method assumes valid UTF-16, whereas Utf16View uses U+FFFD as a replacement
|
// FIXME: simdutf's code point length method assumes valid UTF-16, whereas Utf16View uses U+FFFD as a replacement
|
||||||
// for invalid code points. If we change Utf16View to only accept valid encodings as an invariant, we can
|
// for invalid code points. If we change Utf16View to only accept valid encodings as an invariant, we can
|
||||||
// remove this branch.
|
// remove this branch.
|
||||||
|
|
|
@ -74,10 +74,6 @@ Utf8View Utf8View::unicode_substring_view(size_t code_point_offset, size_t code_
|
||||||
|
|
||||||
size_t Utf8View::calculate_length() const
|
size_t Utf8View::calculate_length() const
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (is_empty())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// FIXME: simdutf's code point length method assumes valid UTF-8, whereas Utf8View uses U+FFFD as a replacement
|
// FIXME: simdutf's code point length method assumes valid UTF-8, whereas Utf8View uses U+FFFD as a replacement
|
||||||
// for invalid code points. If we change Utf8View to only accept valid encodings as an invariant, we can
|
// for invalid code points. If we change Utf8View to only accept valid encodings as an invariant, we can
|
||||||
// remove this branch.
|
// remove this branch.
|
||||||
|
@ -157,12 +153,6 @@ Utf8View Utf8View::trim(Utf8View const& characters, TrimMode mode) const
|
||||||
|
|
||||||
bool Utf8View::validate(size_t& valid_bytes, AllowSurrogates allow_surrogates) const
|
bool Utf8View::validate(size_t& valid_bytes, AllowSurrogates allow_surrogates) const
|
||||||
{
|
{
|
||||||
// FIXME: The CPU-specific implementations behave differently on null inputs. We treat null views as an empty string.
|
|
||||||
if (is_empty()) {
|
|
||||||
valid_bytes = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto result = simdutf::validate_utf8_with_errors(m_string.characters_without_null_termination(), m_string.length());
|
auto result = simdutf::validate_utf8_with_errors(m_string.characters_without_null_termination(), m_string.length());
|
||||||
valid_bytes = result.count;
|
valid_bytes = result.count;
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "simdutf",
|
"name": "simdutf",
|
||||||
"version": "5.3.4#0"
|
"version": "5.5.0#0"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "skia",
|
"name": "skia",
|
||||||
|
|
Loading…
Reference in a new issue