| #include "rive_file_reader.hpp" |
| #include "rive_testing.hpp" |
| #include "rive/decoders/bitmap_decoder.hpp" |
| |
| TEST_CASE("png file decodes correctly", "[image-decoder]") |
| { |
| auto file = ReadFile("../../test/assets/placeholder.png"); |
| REQUIRE(file.size() == 1096); |
| |
| auto bitmap = Bitmap::decode(file.data(), file.size()); |
| |
| REQUIRE(bitmap != nullptr); |
| |
| REQUIRE(bitmap->width() == 226); |
| REQUIRE(bitmap->height() == 128); |
| } |
| |
| TEST_CASE("jpeg file decodes correctly", "[image-decoder]") |
| { |
| auto file = ReadFile("../../test/assets/open_source.jpg"); |
| REQUIRE(file.size() == 8880); |
| |
| auto bitmap = Bitmap::decode(file.data(), file.size()); |
| |
| REQUIRE(bitmap != nullptr); |
| |
| REQUIRE(bitmap->width() == 350); |
| REQUIRE(bitmap->height() == 200); |
| } |
| |
| #ifndef __APPLE__ |
| // Loading this particular jpeg image in CG causes a memory leak CGImageSourceCreateImageAtIndex |
| // calls IIOReadPlugin::createInfoPtr which leaks |
| TEST_CASE("bad jpeg file doesn't cause an overflow", "[image-decoder]") |
| { |
| auto file = ReadFile("../../test/assets/bad.jpg"); |
| REQUIRE(file.size() == 88731); |
| |
| auto bitmap = Bitmap::decode(file.data(), file.size()); |
| |
| REQUIRE(bitmap != nullptr); |
| |
| REQUIRE(bitmap->width() == 24566); |
| REQUIRE(bitmap->height() == 58278); |
| } |
| #endif |
| |
| TEST_CASE("bad png file doesn't cause an overflow", "[image-decoder]") |
| { |
| auto file = ReadFile("../../test/assets/bad.png"); |
| REQUIRE(file.size() == 534283); |
| |
| auto bitmap = Bitmap::decode(file.data(), file.size()); |
| |
| #ifdef __APPLE__ |
| // Loading this bad PNG file in CG actually works and we do get an image albiet black |
| REQUIRE(bitmap != nullptr); |
| |
| REQUIRE(bitmap->width() == 58278); |
| REQUIRE(bitmap->height() == 24566); |
| #else |
| // Our decoders return null as we have an invalid header with bogus resolution and we want to |
| // avoid a potential attack vector |
| REQUIRE(bitmap == nullptr); |
| #endif |
| } |
| |
| TEST_CASE("webp file decodes correctly", "[image-decoder]") |
| { |
| auto file = ReadFile("../../test/assets/1.webp"); |
| REQUIRE(file.size() == 30320); |
| |
| auto bitmap = Bitmap::decode(file.data(), file.size()); |
| |
| REQUIRE(bitmap != nullptr); |
| |
| REQUIRE(bitmap->width() == 550); |
| REQUIRE(bitmap->height() == 368); |
| } |