From b4c6cddd96cb781d6c7f72b67fe73b66b95d1422 Mon Sep 17 00:00:00 2001 From: 0GreenClover0 Date: Sun, 21 May 2023 02:20:13 +0200 Subject: LibWeb: Handle invalid UTF-8 in Fetch's Body#text() --- Userland/Libraries/LibWeb/Fetch/Body.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Userland/Libraries/LibWeb') diff --git a/Userland/Libraries/LibWeb/Fetch/Body.cpp b/Userland/Libraries/LibWeb/Fetch/Body.cpp index f1ed223df7..50a5f3bb9a 100644 --- a/Userland/Libraries/LibWeb/Fetch/Body.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Body.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -135,9 +136,14 @@ WebIDL::ExceptionOr package_data(JS::Realm& realm, ByteBuffer bytes, case PackageDataType::JSON: // Return the result of running parse JSON from bytes on bytes. return Infra::parse_json_bytes_to_javascript_value(realm, bytes); - case PackageDataType::Text: + case PackageDataType::Text: { // Return the result of running UTF-8 decode on bytes. - return JS::PrimitiveString::create(vm, TRY_OR_THROW_OOM(vm, String::from_utf8(bytes))); + auto decoder = TextCodec::decoder_for("UTF-8"sv); + VERIFY(decoder.has_value()); + + auto utf8_text = TRY_OR_THROW_OOM(vm, TextCodec::convert_input_to_utf8_using_given_decoder_unless_there_is_a_byte_order_mark(*decoder, bytes)); + return JS::PrimitiveString::create(vm, move(utf8_text)); + } default: VERIFY_NOT_REACHED(); } -- cgit v1.2.3