From 134c4b633523b405b384b47ff1145b52b98bfcaf Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 15 Apr 2024 09:36:57 +0200 Subject: [PATCH] LibWeb: Fix CRC2D.getImageData() when width != height We were mistakenly using the width as both width and height when getting ImageData from a 2D canvas. --- .../Text/expected/HTML/canvas-getImageData-oblong.txt | 2 ++ .../Text/input/HTML/canvas-getImageData-oblong.html | 11 +++++++++++ Userland/Libraries/LibWeb/HTML/ImageData.cpp | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/HTML/canvas-getImageData-oblong.txt create mode 100644 Tests/LibWeb/Text/input/HTML/canvas-getImageData-oblong.html diff --git a/Tests/LibWeb/Text/expected/HTML/canvas-getImageData-oblong.txt b/Tests/LibWeb/Text/expected/HTML/canvas-getImageData-oblong.txt new file mode 100644 index 00000000000..80bb914c5b2 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/canvas-getImageData-oblong.txt @@ -0,0 +1,2 @@ +[object ImageData] +PASS: Didn't crash diff --git a/Tests/LibWeb/Text/input/HTML/canvas-getImageData-oblong.html b/Tests/LibWeb/Text/input/HTML/canvas-getImageData-oblong.html new file mode 100644 index 00000000000..5ba9b4e0c74 --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/canvas-getImageData-oblong.html @@ -0,0 +1,11 @@ + + + diff --git a/Userland/Libraries/LibWeb/HTML/ImageData.cpp b/Userland/Libraries/LibWeb/HTML/ImageData.cpp index 20ccb4d8eac..2943fe3becc 100644 --- a/Userland/Libraries/LibWeb/HTML/ImageData.cpp +++ b/Userland/Libraries/LibWeb/HTML/ImageData.cpp @@ -29,7 +29,7 @@ WebIDL::ExceptionOr> ImageData::create(JS::Realm& re // 2. Initialize this given sw, sh, and settings set to settings. // 3. Initialize the image data of this to transparent black. auto data = TRY(JS::Uint8ClampedArray::create(realm, sw * sh * 4)); - auto bitmap = TRY_OR_THROW_OOM(vm, Gfx::Bitmap::create_wrapper(Gfx::BitmapFormat::RGBA8888, Gfx::IntSize(sw, sw), 1, sw * sizeof(u32), data->data().data())); + auto bitmap = TRY_OR_THROW_OOM(vm, Gfx::Bitmap::create_wrapper(Gfx::BitmapFormat::RGBA8888, Gfx::IntSize(sw, sh), 1, sw * sizeof(u32), data->data().data())); return realm.heap().allocate(realm, realm, bitmap, data); }