From bb72e525b77a2e9dbc3eff126490b969e79808b7 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 16 Oct 2026 09:55:46 -0700 Subject: [PATCH 1/9] Clean up third_party/lcms/0000-cmserr-changes.patch https://pdfium-review.googlesource.com/c/147470 accidentally included a diff of this file in itself. Change-Id: I2ab29ef95fd63c8dc9b32fcfb1f29b3ec366701a Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161090 Reviewed-by: Tom Sepez Commit-Queue: Lei Zhang --- third_party/lcms/0000-cmserr-changes.patch | 290 --------------------- 1 file changed, 290 deletions(-) diff --git a/third_party/lcms/0000-cmserr-changes.patch b/third_party/lcms/0000-cmserr-changes.patch index 0283b529d2..5389fc8167 100644 --- a/third_party/lcms/0000-cmserr-changes.patch +++ b/third_party/lcms/0000-cmserr-changes.patch @@ -1,293 +1,3 @@ -diff --git a/third_party/lcms/0000-cmserr-changes.patch b/third_party/lcms/0000-cmserr-changes.patch -index 13a854a29..e69de29bb 100644 ---- a/third_party/lcms/0000-cmserr-changes.patch -+++ b/third_party/lcms/0000-cmserr-changes.patch -@@ -1,285 +0,0 @@ --diff --git a/third_party/lcms/src/cmserr.c b/third_party/lcms/src/cmserr.c --index 700152ee3..3c3848b2a 100644 ----- a/third_party/lcms/src/cmserr.c --+++ b/third_party/lcms/src/cmserr.c --@@ -25,6 +25,8 @@ -- -- #include "lcms2_internal.h" -- --+#include "core/fxcrt/fx_memory.h" --+#include "core/fxcrt/fx_system.h" -- -- // This function is here to help applications to prevent mixing lcms versions on header and shared objects. -- int CMSEXPORT cmsGetEncodedCMMversion(void) --@@ -67,140 +67,75 @@ long int CMSEXPORT cmsfilelength(FILE* f) -- return n; -- } -- --- ---// Memory handling ------------------------------------------------------------------ ---// ---// This is the interface to low-level memory management routines. By default a simple ---// wrapping to malloc/free/realloc is provided, although there is a limit on the max ---// amount of memoy that can be reclaimed. This is mostly as a safety feature to prevent ---// bogus or evil code to allocate huge blocks that otherwise lcms would never need. --- ---#define MAX_MEMORY_FOR_ALLOC ((cmsUInt32Number)(1024U*1024U*512U)) --- ---// User may override this behaviour by using a memory plug-in, which basically replaces ---// the default memory management functions. In this case, no check is performed and it ---// is up to the plug-in writer to keep in the safe side. There are only three functions ---// required to be implemented: malloc, realloc and free, although the user may want to ---// replace the optional mallocZero, calloc and dup as well. --- ---cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin); --- ---// ********************************************************************************* --- ---// This is the default memory allocation function. It does a very coarse ---// check of amount of memory, just to prevent exploits ---static ---void* _cmsMallocDefaultFn(cmsContext ContextID, cmsUInt32Number size) --+cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase* Plugin) -- { --- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never allow over maximum --- --- return (void*) malloc(size); --+ return TRUE; --+} -- --- cmsUNUSED_PARAMETER(ContextID); --+// Generic allocate --+void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) --+{ --+ return FXMEM_DefaultAlloc(size); -- } -- -- // Generic allocate & zero ---static ---void* _cmsMallocZeroDefaultFn(cmsContext ContextID, cmsUInt32Number size) --+void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) -- { --- void *pt = _cmsMalloc(ContextID, size); --- if (pt == NULL) return NULL; --- --- memset(pt, 0, size); --- return pt; --+ void* p = FXMEM_DefaultAlloc(size); --+ if (p) memset(p, 0, size); --+ return p; -- } -- --- ---// The default free function. The only check proformed is against NULL pointers ---static ---void _cmsFreeDefaultFn(cmsContext ContextID, void *Ptr) --+// Generic calloc --+void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) -- { --- // free(NULL) is defined a no-op by C99, therefore it is safe to --- // avoid the check, but it is here just in case... --- --- if (Ptr) free(Ptr); --+ cmsUInt32Number total = num * size; --+ if (total == 0 || total / size != num || total >= 512 * 1024 * 1024) --+ return NULL; -- --- cmsUNUSED_PARAMETER(ContextID); --+ return _cmsMallocZero(ContextID, num * size); -- } -- ---// The default realloc function. Again it checks for exploits. If Ptr is NULL, ---// realloc behaves the same way as malloc and allocates a new block of size bytes. ---static ---void* _cmsReallocDefaultFn(cmsContext ContextID, void* Ptr, cmsUInt32Number size) --+// Generic reallocate --+void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) -- { --- --- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never realloc over 512Mb --- --- return realloc(Ptr, size); --- --- cmsUNUSED_PARAMETER(ContextID); --+ return FXMEM_DefaultRealloc(Ptr, size); -- } -- --- ---// The default calloc function. Allocates an array of num elements, each one of size bytes ---// all memory is initialized to zero. ---static ---void* _cmsCallocDefaultFn(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) --+// Generic free memory --+void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) -- { --- cmsUInt32Number Total = num * size; --- --- // Preserve calloc behaviour --- if (Total == 0) return NULL; --- --- // Safe check for overflow. --- if (num >= UINT_MAX / size) return NULL; --- --- // Check for overflow --- if (Total < num || Total < size) { --- return NULL; --- } --- --- if (Total > MAX_MEMORY_FOR_ALLOC) return NULL; // Never alloc over 512Mb --- --- return _cmsMallocZero(ContextID, Total); --+ if (Ptr != NULL) FXMEM_DefaultFree(Ptr); -- } -- -- // Generic block duplication ---static ---void* _cmsDupDefaultFn(cmsContext ContextID, const void* Org, cmsUInt32Number size) --+void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) -- { --- void* mem; --- --- if (size > MAX_MEMORY_FOR_ALLOC) return NULL; // Never dup over 512Mb --- --- mem = _cmsMalloc(ContextID, size); --- --- if (mem != NULL && Org != NULL) --- memmove(mem, Org, size); --- --- return mem; --+ void* p = FXMEM_DefaultAlloc(size); --+ memmove(p, Org, size); --+ return p; -- } -- --- ---// Pointers to memory manager functions in Context0 ---_cmsMemPluginChunkType _cmsMemPluginChunk = { _cmsMallocDefaultFn, _cmsMallocZeroDefaultFn, _cmsFreeDefaultFn, --- _cmsReallocDefaultFn, _cmsCallocDefaultFn, _cmsDupDefaultFn --+_cmsMemPluginChunkType _cmsMemPluginChunk = {_cmsMalloc, _cmsMallocZero, _cmsFree, --+ _cmsRealloc, _cmsCalloc, _cmsDupMem -- }; -- --- ---// Reset and duplicate memory manager -- void _cmsAllocMemPluginChunk(struct _cmsContext_struct* ctx, const struct _cmsContext_struct* src) -- { -- _cmsAssert(ctx != NULL); -- --- if (src != NULL) { --+ if (src != NULL) { -- -- // Duplicate --- ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); --+ ctx ->chunks[MemPlugin] = _cmsSubAllocDup(ctx ->MemPool, src ->chunks[MemPlugin], sizeof(_cmsMemPluginChunkType)); -- } -- else { -- -- // To reset it, we use the default allocators, which cannot be overridden -- ctx ->chunks[MemPlugin] = &ctx ->DefaultMemoryManager; --- } --+ } -- } -- ---// Auxiliary to fill memory management functions from plugin (or context 0 defaults) -- void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkType* ptr) -- { -- if (Plugin == NULL) { --@@ -214,94 +149,15 @@ void _cmsInstallAllocFunctions(cmsPluginMemHandler* Plugin, _cmsMemPluginChunkTy -- ptr ->ReallocPtr = Plugin -> ReallocPtr; -- -- // Make sure we revert to defaults --- ptr ->MallocZeroPtr= _cmsMallocZeroDefaultFn; --- ptr ->CallocPtr = _cmsCallocDefaultFn; --- ptr ->DupPtr = _cmsDupDefaultFn; --- --+ ptr ->MallocZeroPtr= _cmsMallocZero; --+ ptr ->CallocPtr = _cmsCalloc; --+ ptr ->DupPtr = _cmsDupMem; --+ -- if (Plugin ->MallocZeroPtr != NULL) ptr ->MallocZeroPtr = Plugin -> MallocZeroPtr; -- if (Plugin ->CallocPtr != NULL) ptr ->CallocPtr = Plugin -> CallocPtr; -- if (Plugin ->DupPtr != NULL) ptr ->DupPtr = Plugin -> DupPtr; --- --- } ---} --- -- ---// Plug-in replacement entry ---cmsBool _cmsRegisterMemHandlerPlugin(cmsContext ContextID, cmsPluginBase *Data) ---{ --- cmsPluginMemHandler* Plugin = (cmsPluginMemHandler*) Data; --- _cmsMemPluginChunkType* ptr; --- --- // NULL forces to reset to defaults. In this special case, the defaults are stored in the context structure. --- // Remaining plug-ins does NOT have any copy in the context structure, but this is somehow special as the --- // context internal data should be malloce'd by using those functions. --- if (Data == NULL) { --- --- struct _cmsContext_struct* ctx = ( struct _cmsContext_struct*) ContextID; --- --- // Return to the default allocators --- if (ContextID != NULL) { --- ctx->chunks[MemPlugin] = (void*) &ctx->DefaultMemoryManager; --- } --- return TRUE; -- } --- --- // Check for required callbacks --- if (Plugin -> MallocPtr == NULL || --- Plugin -> FreePtr == NULL || --- Plugin -> ReallocPtr == NULL) return FALSE; --- --- // Set replacement functions --- ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- if (ptr == NULL) --- return FALSE; --- --- _cmsInstallAllocFunctions(Plugin, ptr); --- return TRUE; ---} --- ---// Generic allocate ---void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size) ---{ --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- return ptr ->MallocPtr(ContextID, size); ---} --- ---// Generic allocate & zero ---void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size) ---{ --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- return ptr->MallocZeroPtr(ContextID, size); ---} --- ---// Generic calloc ---void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size) ---{ --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- return ptr->CallocPtr(ContextID, num, size); ---} --- ---// Generic reallocate ---void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number size) ---{ --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- return ptr->ReallocPtr(ContextID, Ptr, size); ---} --- ---// Generic free memory ---void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr) ---{ --- if (Ptr != NULL) { --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- ptr ->FreePtr(ContextID, Ptr); --- } ---} --- ---// Generic block duplication ---void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size) ---{ --- _cmsMemPluginChunkType* ptr = (_cmsMemPluginChunkType*) _cmsContextGetClientChunk(ContextID, MemPlugin); --- return ptr ->DupPtr(ContextID, Org, size); -- } -- -- // ******************************************************************************************** diff --git a/third_party/lcms/src/cmserr.c b/third_party/lcms/src/cmserr.c index ac89811a9..902b7762a 100644 --- a/third_party/lcms/src/cmserr.c From c3e1143e86dd95e2ede9f9415aad103c646b5e81 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 16 Oct 2026 13:11:45 -0700 Subject: [PATCH 2/9] Use display list comparisons in flatten embedder tests Replace bitmap comparisons in FPDFFlattenEmbedderTest with DisplayListRenderer assertions. This tests the presence of annotation text and vector paths directly against display list output instead of platform-specific rasterized bitmaps, eliminating 17 obsolete golden PNG files. -- Add missing name to unicode translations from "a1".."a206" for the fontations case provided in FT, as indicated by logging differences. Change-Id: Ic04c3cc963a064a140ff37f1a1cef861d3bee5e9 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160352 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/cfx_face.cpp | 71 +++++++++++++++--- fpdfsdk/fpdf_flatten_embeddertest.cpp | 29 +++---- .../embedder_tests/blank_100x120.dump.txt | 8 ++ .../embedder_tests/blank_100x120.png | Bin 106 -> 0 bytes .../embedder_tests/bug_861842.dump.txt | 10 +++ .../embedder_tests/bug_861842_agg.png | Bin 729 -> 0 bytes .../embedder_tests/bug_861842_agg_mac.png | Bin 557 -> 0 bytes .../embedder_tests/bug_861842_skia.png | Bin 499 -> 0 bytes .../embedder_tests/bug_861842_skia_mac.png | Bin 506 -> 0 bytes .../embedder_tests/bug_889099.dump.txt | 10 +++ .../embedder_tests/bug_889099_agg.png | Bin 1642 -> 0 bytes .../embedder_tests/bug_889099_agg_mac.png | Bin 1337 -> 0 bytes .../bug_889099_flattened.dump.txt | 11 +++ .../bug_889099_flattened_agg.png | Bin 922 -> 0 bytes .../bug_889099_flattened_agg_mac.png | Bin 922 -> 0 bytes .../bug_889099_flattened_skia.png | Bin 843 -> 0 bytes .../bug_889099_flattened_skia_mac.png | Bin 894 -> 0 bytes .../bug_889099_flattened_skia_win.png | Bin 482 -> 0 bytes .../embedder_tests/bug_889099_skia.png | Bin 1125 -> 0 bytes .../embedder_tests/bug_889099_skia_mac.png | Bin 1158 -> 0 bytes .../embedder_tests/bug_889099_skia_win.png | Bin 525 -> 0 bytes .../embedder_tests/bug_890322.dump.txt | 11 +++ .../embedder_tests/bug_890322_saved.dump.txt | 13 ++++ .../embedder_tests/bug_896366.dump.txt | 11 +++ .../embedder_tests/bug_896366_agg.png | Bin 601 -> 0 bytes .../embedder_tests/bug_896366_saved.dump.txt | 13 ++++ .../embedder_tests/bug_896366_skia.png | Bin 1088 -> 0 bytes 27 files changed, 164 insertions(+), 23 deletions(-) create mode 100644 testing/resources/embedder_tests/blank_100x120.dump.txt delete mode 100644 testing/resources/embedder_tests/blank_100x120.png create mode 100644 testing/resources/embedder_tests/bug_861842.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_861842_agg.png delete mode 100644 testing/resources/embedder_tests/bug_861842_agg_mac.png delete mode 100644 testing/resources/embedder_tests/bug_861842_skia.png delete mode 100644 testing/resources/embedder_tests/bug_861842_skia_mac.png create mode 100644 testing/resources/embedder_tests/bug_889099.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_889099_agg.png delete mode 100644 testing/resources/embedder_tests/bug_889099_agg_mac.png create mode 100644 testing/resources/embedder_tests/bug_889099_flattened.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_889099_flattened_agg.png delete mode 100644 testing/resources/embedder_tests/bug_889099_flattened_agg_mac.png delete mode 100644 testing/resources/embedder_tests/bug_889099_flattened_skia.png delete mode 100644 testing/resources/embedder_tests/bug_889099_flattened_skia_mac.png delete mode 100644 testing/resources/embedder_tests/bug_889099_flattened_skia_win.png delete mode 100644 testing/resources/embedder_tests/bug_889099_skia.png delete mode 100644 testing/resources/embedder_tests/bug_889099_skia_mac.png delete mode 100644 testing/resources/embedder_tests/bug_889099_skia_win.png create mode 100644 testing/resources/embedder_tests/bug_890322.dump.txt create mode 100644 testing/resources/embedder_tests/bug_890322_saved.dump.txt create mode 100644 testing/resources/embedder_tests/bug_896366.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_896366_agg.png create mode 100644 testing/resources/embedder_tests/bug_896366_saved.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_896366_skia.png diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 8f68046027..5d543236a1 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -17,6 +17,7 @@ #include "core/fxcrt/check_op.h" #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fixed_size_data_vector.h" +#include "core/fxcrt/fx_extension.h" #include "core/fxcrt/notreached.h" #include "core/fxcrt/numerics/clamped_math.h" #include "core/fxcrt/numerics/safe_conversions.h" @@ -53,24 +54,21 @@ namespace { +// Boundary value to avoid integer overflow when adding 1/64th of the value. +constexpr int kMaxRectTop = 2114445437; + #if defined(PDF_ENABLE_FREETYPE) constexpr int kThousandthMinInt = std::numeric_limits::min() / 1000; constexpr int kThousandthMaxInt = std::numeric_limits::max() / 1000; constexpr int kMaxGlyphDimension = 2048; -#endif // defined(PDF_ENABLE_FREETYPE) - -// Boundary value to avoid integer overflow when adding 1/64th of the value. -constexpr int kMaxRectTop = 2114445437; +constexpr float kCoordUnit = 64 * 64.0f; -#if defined(PDF_ENABLE_FREETYPE) struct OUTLINE_PARAMS { UnownedPtr path_; FT_Pos cur_x_; FT_Pos cur_y_; }; -constexpr float kCoordUnit = 64 * 64.0f; - int FTPosToCBoxInt(FT_Pos pos) { // Boundary values to avoid integer overflow when multiplied by 1000. static constexpr FT_Pos kMinCBox = -2147483; @@ -475,6 +473,57 @@ class ScopedFaceTransform { }; #endif // defined(PDF_ENABLE_FREETYPE) +#if defined(PDF_ENABLE_FONTATIONS) +wchar_t UnicodeFromZapfDingbatsName(const char* name) { + ByteStringView name_view(name); + if (name_view.GetLength() < 2) { + return 0; + } + if (name_view.Front() != 'a') { + return 0; + } + uint32_t val = 0; + for (char c : name_view.Substr(1)) { + if (!FXSYS_IsDecimalDigit(c)) { + return 0; + } + val = val * 10 + FXSYS_DecimalCharToInt(c); + if (val > 206) { + return 0; + } + } + if (val == 0) { + return 0; + } + static constexpr std::array kZapfGlyphs = { + 0x2701, 0x2702, 0x2704, 0x260e, 0x2706, 0x271d, 0x271e, 0x271f, 0x2720, + 0x2721, 0x261b, 0x261e, 0x270c, 0x270d, 0x270e, 0x270f, 0x2711, 0x2712, + 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719, 0x271a, 0x271b, + 0x271c, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, 0x2605, 0x2729, + 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, + 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, + 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, + 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x25cf, 0x274d, + 0x25a0, 0x274f, 0x2751, 0x25b2, 0x25bc, 0x25c6, 0x2756, 0x0000, 0x25d7, + 0x2758, 0x2759, 0x275a, 0x276f, 0x2771, 0x2772, 0x2773, 0x2768, 0x2769, + 0x276c, 0x276d, 0x276a, 0x276b, 0x2774, 0x2775, 0x275b, 0x275c, 0x275d, + 0x275e, 0x2761, 0x2762, 0x2763, 0x2764, 0x2710, 0x2765, 0x2766, 0x2767, + 0x2660, 0x2665, 0x2666, 0x2663, 0x0000, 0x0000, 0x0000, 0x0000, 0x2709, + 0x2708, 0x2707, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, + 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, 0x2778, 0x2779, 0x277a, 0x277b, + 0x277c, 0x277d, 0x277e, 0x277f, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, + 0x2785, 0x2786, 0x2787, 0x2788, 0x2789, 0x278a, 0x278b, 0x278c, 0x278d, + 0x278e, 0x278f, 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x27a3, + 0x2194, 0x2195, 0x2799, 0x279b, 0x279c, 0x279d, 0x279e, 0x279f, 0x27a0, + 0x27a1, 0x27a2, 0x27a4, 0x27a5, 0x27a6, 0x27a7, 0x27a8, 0x27a9, 0x27ab, + 0x27ad, 0x27af, 0x27b2, 0x27b3, 0x27b5, 0x27b8, 0x27ba, 0x27bb, 0x27bc, + 0x27bd, 0x27be, 0x279a, 0x27aa, 0x27b6, 0x27b9, 0x2798, 0x27b4, 0x27b7, + 0x27ac, 0x27ae, 0x27b1, 0x2703, 0x2750, 0x2752, 0x276e, 0x2770, + }; + return kZapfGlyphs[val - 1]; +} +#endif // defined(PDF_ENABLE_FONTATIONS) + } // namespace #if defined(PDF_ENABLE_FONTATIONS) @@ -532,12 +581,14 @@ RetainPtr CFX_Face::New(RetainPtr cache_entry, // static wchar_t CFX_Face::UnicodeFromAdobeName(const char* name) { + CHECK(name); #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { uint32_t unicode = 0; - return skrifa::agl_name_to_unicode(name, unicode) - ? static_cast(unicode) - : 0; + if (skrifa::agl_name_to_unicode(name, unicode)) { + return static_cast(unicode); + } + return UnicodeFromZapfDingbatsName(name); } #endif // defined(PDF_ENABLE_FONTATIONS) #if defined(PDF_ENABLE_FREETYPE) diff --git a/fpdfsdk/fpdf_flatten_embeddertest.cpp b/fpdfsdk/fpdf_flatten_embeddertest.cpp index 23a18d52b0..f9211fe64b 100644 --- a/fpdfsdk/fpdf_flatten_embeddertest.cpp +++ b/fpdfsdk/fpdf_flatten_embeddertest.cpp @@ -7,7 +7,6 @@ #include "public/fpdf_flatten.h" #include "public/fpdfview.h" #include "testing/embedder_test.h" -#include "testing/embedder_test_constants.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -85,14 +84,15 @@ TEST_F(FPDFFlattenEmbedderTest, Bug861842) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_861842"); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "bug_861842"); EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page.get(), FLAT_PRINT)); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); // TODO(crbug.com/861842): This should not render blank. - VerifySavedDocument("blank_100x120"); + VerifySavedDocumentWithDisplayList("blank_100x120", FPDF_ANNOT); } TEST_F(FPDFFlattenEmbedderTest, Bug889099) { @@ -101,13 +101,14 @@ TEST_F(FPDFFlattenEmbedderTest, Bug889099) { ASSERT_TRUE(page); // The original document has a malformed media box; the height is -400. - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_889099"); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "bug_889099"); EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page.get(), FLAT_PRINT)); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - VerifySavedDocumentWithExpectationSuffix("bug_889099_flattened"); + VerifySavedDocumentWithDisplayList("bug_889099_flattened", FPDF_ANNOT); } TEST_F(FPDFFlattenEmbedderTest, Bug890322) { @@ -115,13 +116,14 @@ TEST_F(FPDFFlattenEmbedderTest, Bug890322) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kBug890322Png); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "bug_890322"); EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page.get(), FLAT_PRINT)); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - VerifySavedDocumentWithExpectationSuffix(pdfium::kBug890322Png); + VerifySavedDocumentWithDisplayList("bug_890322_saved", FPDF_ANNOT); } TEST_F(FPDFFlattenEmbedderTest, Bug896366) { @@ -129,13 +131,14 @@ TEST_F(FPDFFlattenEmbedderTest, Bug896366) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_896366"); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "bug_896366"); EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page.get(), FLAT_PRINT)); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - VerifySavedDocumentWithExpectationSuffix("bug_896366"); + VerifySavedDocumentWithDisplayList("bug_896366_saved", FPDF_ANNOT); } TEST_F(FPDFFlattenEmbedderTest, FlattenShouldRemoveAcroForm) { diff --git a/testing/resources/embedder_tests/blank_100x120.dump.txt b/testing/resources/embedder_tests/blank_100x120.dump.txt new file mode 100644 index 0000000000..55fbc7cbf0 --- /dev/null +++ b/testing/resources/embedder_tests/blank_100x120.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,100,120] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,120.0000) line(0.0000,0.0000) line(100.0000,0.0000) line(100.0000,120.0000) line(0.0000,120.0000,close)] +SaveState +SaveState +RestoreState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/blank_100x120.png b/testing/resources/embedder_tests/blank_100x120.png deleted file mode 100644 index 84a43f0cb26f38d9847c54d2de4efaf013508f83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^DL`Do$P6UyERKE$QjEnx?oJHr&dIz4a+m{rLR|m< z|G)f*^a&tW)YHW=L_#uIf^~6%NKaFs0T&x10|VOx21b?oL)(A~7(8A5T-G@yGywn> C1R90_ diff --git a/testing/resources/embedder_tests/bug_861842.dump.txt b/testing/resources/embedder_tests/bug_861842.dump.txt new file mode 100644 index 0000000000..05579cf881 --- /dev/null +++ b/testing/resources/embedder_tests/bug_861842.dump.txt @@ -0,0 +1,10 @@ +SaveState +SetBaseClip [0,0,100,120] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,120.0000) line(0.0000,0.0000) line(100.0000,0.0000) line(100.0000,120.0000) line(0.0000,120.0000,close)] +SaveState +RestoreState +RestoreState +SaveState +DrawDeviceText font="Chrom Dingbats OTF" size=25.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,40.0000,70.0000] glyphs=[(idx=109,u=U+2714,origin=(0.0000,0.0000))] +RestoreState +FillRect [40,70,60,50] color=0x64dde4ff diff --git a/testing/resources/embedder_tests/bug_861842_agg.png b/testing/resources/embedder_tests/bug_861842_agg.png deleted file mode 100644 index 5bed30438030cc87ad0b486fe38e7a73e907a8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmZXSYfMsc0L8IfHJZyTOKa68n%Zk^E}FdbM^wxe7u=EX)4Mg>(nq=S zhslFVV(59aRP2a2)7ItY`Cqzw9M`vGl}_C`_uxby_ZR=clyQBMiHx8e%uiI;d4t+h^-PX@*{Vb%E(r%vCdiy`*qz`W7m zJ9y$Wn=e{#=NKa>BJ(sOOg!h`q?_d!PEL<#2=vS%t@3p{fyK!>`%$6n z_zgDns|AlqFl!c2mV?P^X!)AF;6>IkN$eS>z4;x@Ay}C2bKAe$XPnhoF@MpTCCfK1U$tfB znr&;=?_9TG_ol7;w*tYALpyiw+;{Nw{zGRE96o#S@VP^W4jnmm@#u+5Cr)2Ib@s;T zb2rbPzjgM)?eiD!oWFGE>h(w0Za%ql=gz$cuOB>q`|!#8C(l2=eEsd^o9}Pl|9bo3 z*SinD-+lc3{^OtbpZd6|MuktEa}vyMe}3|J9CC2g7GJZN^Ub4|aki)Uc$6@Kr^g?||16n0y?Lq1 z{*yOM=&|ve(051F;d-K0kulSTnIAr!ufBbDTcIh-hKUl=F-oBNtuCv^!|xBD{(k)Y@6(t6|Ni~^|Nno42Kz;z<3D)1IEG~0dwb12%E?i{ z_2Fj*!v#q$J_(0fHU`H3{I=hK{m_|A!w=S58|yEW=9``sViUvw6IE3H&G_Hs!+!qd ziPG-XIVmhLYRb+FK2PbYk!5(hyQh8q={rB}utsf{yj^-{|@w+I-5UXN{F^8!|m4$>6v%0rW&eO zvhLhw&?gkV!`_^2X6XL^*)rE=o_Nf4AoJ73S?ey%eG+$US>`_Zdw+yFJJ5j+>rckn XdmAbpH1t`4erND>^>bP0l+XkK1;6)M diff --git a/testing/resources/embedder_tests/bug_861842_skia_mac.png b/testing/resources/embedder_tests/bug_861842_skia_mac.png deleted file mode 100644 index 37d51e1d4e1057f0e64e36668494ef1aa60811d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmeAS@N?(olHy`uVBq!ia0vp^DL`Do!3-pgHI}ylDaPU;cPEB*=VV?2Iokt#LR`Zm zQzD{LBcs!zV$!2yGh*U0W8<^p60&phD)S1e^9ySVi|fiOTdHe2>KeKmoBLYYCU*5q z@9CR4b^4;|GndSmwRF~;<#Xn(oVQ^0!o}+rEm^;K>4v4tH?3H;b>-@9Yu4>tw_*3j z&HJ|PIJ|S`&RsyT=lI_Jr}iBB@Z|c>MIklV=~FJ$v>7 z2wr`C_2&EQw?E#z`}y|$uXi7QfBgLK)0h8$|Ni~||9{7d6>>l?eDrj249U3n_L^rD zQy`D)!(i2KTsIad-B@^|DYsE5`~T}Ag)?*78tb%|CRLyUmP%W6-Q_^^>Sj)(oAxzFlt}g6s?|Rz>d(Pijm$$g0tE1z*S-_ptH6JVs zqy!Cf8IKw$tA{eaaX+$z)4+rCG53Kom#y3dQz!ojZz%e-k-1=Eh;}f;tZ0Vx%)48U zB~?|j?%ZkMCltNI)V$AV^}f&9GRy8w{;1_(|1+c4EMouJy*;I|_4fOIs|pFCgGjDV Z%*^}mdVcItD*}3+!PC{xWt~$(69DY$_T>No diff --git a/testing/resources/embedder_tests/bug_889099.dump.txt b/testing/resources/embedder_tests/bug_889099.dump.txt new file mode 100644 index 0000000000..8e2be3b5aa --- /dev/null +++ b/testing/resources/embedder_tests/bug_889099.dump.txt @@ -0,0 +1,10 @@ +SaveState +SetBaseClip [0,0,300,400] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,400.0000) line(0.0000,0.0000) line(300.0000,0.0000) line(300.0000,400.0000) line(0.0000,400.0000,close)] +SaveState +RestoreState +RestoreState +SaveState +DrawDeviceText font="Arimo" size=12.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,101.0000,19.1640] glyphs=[(idx=42,u=U+0047,origin=(0.0000,0.0000)) (idx=82,u=U+006F,origin=(9.3360,0.0000)) (idx=82,u=U+006F,origin=(16.0080,0.0000)) (idx=71,u=U+0064,origin=(22.6800,0.0000)) (idx=3,u=U+0020,origin=(29.3520,0.0000)) (idx=29,u=U+003A,origin=(32.6880,0.0000)) (idx=64,u=U+005D,origin=(36.0240,0.0000))] +RestoreState +FillRect [100,130,200,-100] color=0x64dde4ff diff --git a/testing/resources/embedder_tests/bug_889099_agg.png b/testing/resources/embedder_tests/bug_889099_agg.png deleted file mode 100644 index be9ddecc4c64e2764812b3cf5a05be92e1d876a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1642 zcmeHI`A^e#81ClGoJ40_aLNcq-Lj3LiB7k8%}8(z#S_PHGK=Y?Dzv5hLJzJg<&e8p zKsj2p98wBWwYFS>g_70+!isB4DLpt^>HTR7a@Ftf$g=-nzwFKXK6&#dZ}R4Op5)Cw zaV&V%N}rVo1Y%XlPeG>;i1z}Pine0e(qs##F$95l|N4p0(}#Xb5g^GAqjJROlliEE z-V4#B=(tlo!*>s~XGO3=DP` zGyWozQD0e6TlvI%N2XyB;;J&^t4Y`zg}(M0xwctZ+cr|i5!8)(IH{P1ZdoHwe27-V%tknv)vFRO!_zoM~NyB%R zQaibKI*lITq^IjfLif$2Ze~ii6&6V(A~W1mLg;zO?-_QA?JuQeNmBiMZ$(l+Gv!&^ zqk(SGpCYl$5eFmfS|tR4bGsG=b%b=4~!IecKC(+hf9(DQn&4A zaAVn-=;ZsgvGZedcJ1j5Z(-tK)xpRW#=Totd`wwC_;O**y-@4!fbTwk^_()x+S$-M z6zKGixD;_WH{jUDsbOMICu2^(_!)BNnH{_dp>|~f^OpmAoUbCiA~w|c=BT{=tRo%c z3UhyOX8OsaaG&7Y$ojqbuDc*R>@Ygi>znc3Jr(G%<{9!FYdhM%Z*>UdkCRaLsc{G5 zPPEb5_xQ+1B0fFfw^1Ll9^%jB(RMzT8`|;ubG@6WXEP=)a5cijeQd}4npZZBA!emfaOPC+hDm@$s1f3@b2Ju4*B4%PySzgO-uMT b>#nD3YofX~`$0=T1QBxRSkS$|sIRZLhBDtf}v+ zZRo0N=x%AB)YdV%t#e9y*VL}w>0P}uy8CAIPM9@u^1Mk?7fhM9aO#Z3GiEQHF?-pp zxhrPR1EQ64=C7PPf7OD;>lQ9qw`j@wMN8K&UbbQBip?ulZC$x$+sZZDSFhW-W<3z? zTDM{Mx{Z6*Z`!kQ^S+H+_HW*HaLe{XTX!7VvHR%G-N$zAJ-%!2i9P#I?K^P#(9!dU zk6k!=;_~s6S5BP1dgAo8lV`4-I&=Nh*&Aoh-#mN%*13zf&tJTA;qtwUSMFW9a{toR z2bZq_(Zeg(A6~opdFT19yU%ameR2EV%RBd9-o5|o-h zql=qYE!H-e4zseNsyC@7asgXI8%`aK041C+f;X zlS5K}P43t}K6d_Jaj@T?S(_ibhZjDNyZEy<{I5gt<>$9ebv-}*vsoj!=3p)N>g;JT zKD*McU47@zcjemIT{D+|-MaaDuJ5GPTQ~fxYySVKIAhhmcu%7X<|Uu6@7QqcUv5R2 z>KemjS*shIr{mc{fd>!80cH5ctmza2M`n{M#8uu9w@rh(5b92-BUvCZ&k2eDQH`Kr dS;Kite)fLHH217ZfMIp=nB#XnDy)i}dve01Al(FjjFld`Fkm%nxXS+sO> zwuPka<-(m)@~`uMd8e=9`7urFcY>(}em zqN9&ZzV7?{xKw`1mW}lZPd)NX`*QTB*spuxGwEbtguV3bodr)P9aZ<<8MS+7-Tfz5 z?zQ=Dt*s2$TXpx=U(cd!$u;+9RoK}~R#`gzv8U0uA}!CCSD(l0>qUHicY5yE4bN)V z##-6F*!@_U*Ly?4!6sJjX<$-J2gC-3CxqO<0uI{*PEZIZ925eRO{ySv6YHqPK@d3q bzV2h@ObP0l+XkK$B2AT diff --git a/testing/resources/embedder_tests/bug_889099_flattened_agg_mac.png b/testing/resources/embedder_tests/bug_889099_flattened_agg_mac.png deleted file mode 100644 index f6ecae44b83f87bdfe590b0493c20456cba30bbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmeAS@N?(olHy`uVBq!ia0y~yVAKKP2^>HH217ZfHM;*f7{%D|JinL)x6WeE}PdmFmQ|M zL~KYv&YZxEnj-_th9b&ueaQPjVxxC&^E5yR?1do@Kf(S7^uo*NNXAl5_9s43+QG56*fK zb}{~z|LXERnfh^i^sIm9eg9_Z(|F^{%NN*45R$JHLzF^XtrF?n%d8 z|L=O1vNqXb?e5T%3C_-MPtHqHxOuInB-<$D%avHaZ--`Gb0}2z{5I!L#1|FsX#eY~ zdyoDO%{^HaaoKv$i+k@EYJb-2(X;%qdUeH@B`^Nm46(ix@c(V1Yx1O;eO%d_HYRJI z*1i_wziZWMt$uZNt<_@p&#%69YS!D|lb)2Ru35?ZUrwIgeR4`l!JpJq{2S8ZkE=y& zUiURbU1vMr1{O$&ae~9`pb#kZ4mPQRNmg$Vo0WSSm=x0iv4P4UHH217ZfI{_oU-dv)wj_m@ak+AJ@x-R3_3SIs@wEpND3HY6NuV&xWNirDZ^c+Jw2 z3+I_8pRX&vB=Mf-b(ismNh-q3{kPsPZ(C)b@RVhZ%E{gH#OJQux!25Q_8l1=_vfFU zCPdns%~L7XPWYRXw!pYXe&2?Q?SDQjs|lEUZ07b+z-;>|$ta=wP>0bEmb?V}YrCT?A@|+}-dFFequUp#k zHH217Zf+bw5Se0A6z|1mg*Q6)0 zwW8O`zOS17)6&fB+sE9Qr`;+ILVVRuJ3YVovH|4p_Asko2xhf(kdSQYm;Xh)i2S1*|K$e_t)uX<@;BcU(>oiTlwkV z*+&0XFTeICGk(s>IUbXqs{2M*Z(X-->ZN}Ml~F6FEPN8R@`~E0oohq<<@_hD+{Ba} zu6=gx&)aE}Or}p#@!qX>;8y+N_Jp^)qs@;c{w!@!1&0u;Hz=G~xu=0iF&z+FOeX?D wZeRhiHzaU^$%8_WKpoWx4x)h#oc~q(87me|-)hC<6bZ^$p00i_>zopr0L6rBumAu6 diff --git a/testing/resources/embedder_tests/bug_889099_flattened_skia_win.png b/testing/resources/embedder_tests/bug_889099_flattened_skia_win.png deleted file mode 100644 index 1b1a3ee3895d8ffe85e8b3a4aca750ccabacf487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmeAS@N?(olHy`uVBq!ia0y~yVAKKP2`tP&k!R5k9zaSuz$e5NNPByG=jG*fcXuyY zvSiPmJ(n+Ee)a0r|Ns9vGf!9m^)z|9IEGZ*dVAH-i=j}TFA${4UOYTx~3!efmT9 z)ZJ`rN8`uB< diff --git a/testing/resources/embedder_tests/bug_889099_skia.png b/testing/resources/embedder_tests/bug_889099_skia.png deleted file mode 100644 index 4f2bb1888957dcdec8cb3ba01acfbe4aab6308b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1125 zcmeAS@N?(olHy`uVBq!ia0y~yVAKKP2^`Eo5#`luJ%JpN0G|-o@W_;isMM&K^yt`( zn7GW?_^h~u?D)i-grwZWp2p_Brk4KZ)(IV5Q@eX-^z_Y~Flp}OsSBn|TR3(4qM5Uo z&7Qkr?)+8r7ObAXaLwYS8h(w0Zaltm>*=jK&+puOdH4RS2an!9eEjaovyV@oe|q-f^NUwsU%vkK z>dp7pZ-2ab_w)V7KOa8*{rLIcr!W73fNctIF9QQJkEe@cNX4zU*G~oo2a2>^)Gk`Q zqA?@jpazrK4JDVOdK%jl+!m_@{(S#?f4lG;m(!bMQWRcG&wUwJy6T*rt7)52+c86T zMs6{khz$t`n^?K8DIUBPpYP+d_1@pK6W=}^eCSdr9TpmT^3<2r51;?;Jt)6n6VvKd ztF-oZzHOda_UzQLv`;C^%=XV--@WzO)~6~rZJA!Hho%2YSn~JSs}GfLPanT^?ZLI3 zHW}aUUBA0VaLw`JlW~C}Z}WcITHe07V+K$6zeiD90k{hrX9@U?%R=Ok^Qdfl0K?_{VpClyrc?&QnE@oDPfY)`^U7VjpM3Md zU*1HJf8ibb9zy_WH)2rk4KZ)(I_b6WcqdbaYMa?4H)$JENy>X8*)F z6DQA`GHv11>5Hb#SUi2^l9{uY&7Qkr-h$N&7Oh>lc-`Wq8ZV5M~`1Raq8-+GuO|YyLtBft#cP{pTBtL!lk>HuH3(T^}&^E53k*LeEsH=TX&w{ zzWd_Ny_feMyngWL?Ze0Ko;>^b^!cafFTcEa_4VcJZ?E2bfBp8yn|D9oefa(UM7ui6k<#Ufj>Vq|k}A&>WOsBo#Iwe{nYR#n+u_57L6Dzman%A9Mw{pE! zx_0o z=k%{(nR+Up&l+u+dAK??BS*#a+w$F&T&q{D(uzNQ>*bQXC?Msr&_B&Jse{jsa<`zfAa4Cdd?BGYnDcRT77kuZ=I(4 z$=>bydFpdF8JbMBX)a~V-oHle#m-Pxum!CnAbNpui7tl zlh#aUj(C3W0spS$tLwf`T5{WSQpvfqt))Nn5C4qbpx68L*;g)|dRa(7!9#378P`m? z#J~;^f;dAJ5|7@H*qjD+DmZ3!B0%vARK@}(6F5gT0t4il>05ov$pPYuYxea6%NGVu LS3j3^P65G=F*t})i!CiZfpSy7T)}80iUVMJ@?&qg3|A8Rqx~~e*l-Zsxjv*Dd-dzDGGxgvTQ-e*!UU;FQWlI|OZc9gD9yN(_<7v{$yZVy2HB^$ zfBxhC6Q6c(Pv*Wf^|bUl_vTh0_!_<@`Lf)(ss4h7Ws(u*OXL0~9MxldT`VdXeE;Y^ z+n%?%N1{(2Smo@}!@pjCwUy1j_;ky)yXO9Sx3lKWw#!wMp9{Sf*m&~ztZVlpzeh$C zhQBhppW~V^gHzB&K^ diff --git a/testing/resources/embedder_tests/bug_890322.dump.txt b/testing/resources/embedder_tests/bug_890322.dump.txt new file mode 100644 index 0000000000..65900bdb9f --- /dev/null +++ b/testing/resources/embedder_tests/bug_890322.dump.txt @@ -0,0 +1,11 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +RestoreState +RestoreState +SaveState +RestoreState +SetClip_PathFill rule=winding matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,120.0000] points=[move(0.0000,40.0000) line(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,120.0000] points=[move(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000) line(0.0000,0.0000,close)] +RestoreState diff --git a/testing/resources/embedder_tests/bug_890322_saved.dump.txt b/testing/resources/embedder_tests/bug_890322_saved.dump.txt new file mode 100644 index 0000000000..30b4713a2b --- /dev/null +++ b/testing/resources/embedder_tests/bug_890322_saved.dump.txt @@ -0,0 +1,13 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +SaveState +SaveState +RestoreState +SetClip_PathFill rule=winding matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,120.0000] points=[move(0.0000,40.0000) line(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,120.0000] points=[move(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000) line(0.0000,0.0000,close)] +RestoreState +RestoreState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_896366.dump.txt b/testing/resources/embedder_tests/bug_896366.dump.txt new file mode 100644 index 0000000000..47cbbcee80 --- /dev/null +++ b/testing/resources/embedder_tests/bug_896366.dump.txt @@ -0,0 +1,11 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +RestoreState +RestoreState +SaveState +RestoreState +SetClip_PathFill rule=winding matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,712.0000] points=[move(0.0000,40.0000) line(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,75.0000,712.0000] points=[move(0.0000,0.0000) line(50.0000,0.0000) line(50.0000,40.0000) line(0.0000,40.0000) line(0.0000,0.0000,close)] +RestoreState diff --git a/testing/resources/embedder_tests/bug_896366_agg.png b/testing/resources/embedder_tests/bug_896366_agg.png deleted file mode 100644 index f24bb14b78e3fe3eeb5b8451bb653e7d784a0639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmeAS@N?(olHy`uVBq!ia0y~yU`kZ z{d(>tph6B$7srr_TW@bDiZUpOusF_|*ktoXQQ2lgypsPJHHp1%mt8wC3I5eo1L zab;kzXJBw(V5nzcXkcLY4+O=#_gw+%yW{EN7*cWT?FC2P1_Ke+4KshRZE$$Tz}S=W zZ>`V4=m*CZPQ76EbA@KWGM|}7sT#o`YKkV1l01b(@uY%yZAKu<8K@3UEd=R0g{&FV z42b4sv@rwXfGHHY1E(3_5I_kJs9$^ Date: Fri, 16 Oct 2026 13:22:44 -0700 Subject: [PATCH 3/9] Use display list comparisons in PPO embedder tests Replace bitmap comparisons in FPDFPPOEmbedderTest with DisplayListRenderer assertions. This tests page organization, N-up import, page-to-XObject conversions, and page import directly against display list output instead of rasterized bitmaps, eliminating 23 obsolete golden PNG files. Change-Id: I19d59b3953e4002cde952d8eddec26ee02048fdd Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160353 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- fpdfsdk/fpdf_ppo_embeddertest.cpp | 88 +++++++----------- .../bad_page_type_new_page1.dump.txt | 14 +++ .../bad_page_type_new_page1_agg.png | Bin 404 -> 0 bytes .../bad_page_type_new_page1_skia.png | Bin 577 -> 0 bytes .../bad_page_type_new_page2.dump.txt | 7 ++ .../bad_page_type_new_page2.png | Bin 125 -> 0 bytes .../embedder_tests/bug_1229106_rect.dump.txt | 11 +++ .../embedder_tests/bug_1229106_rect.png | Bin 990 -> 0 bytes .../bug_1229106_two_up.dump.txt | 20 ++++ .../embedder_tests/bug_1229106_two_up.png | Bin 1161 -> 0 bytes .../embedder_tests/bug_40162073.dump.txt | 8 ++ .../resources/embedder_tests/bug_40162073.png | Bin 153 -> 0 bytes .../bug_40162073_wrong.dump.txt | 9 ++ .../embedder_tests/bug_40162073_wrong.png | Bin 164 -> 0 bytes .../embedder_tests/bug_750568_page1.dump.txt | 7 ++ .../embedder_tests/bug_750568_page1_agg.png | Bin 160 -> 0 bytes .../embedder_tests/bug_750568_page1_skia.png | Bin 174 -> 0 bytes .../embedder_tests/bug_750568_page2.dump.txt | 7 ++ .../embedder_tests/bug_750568_page2_agg.png | Bin 221 -> 0 bytes .../embedder_tests/bug_750568_page2_skia.png | Bin 243 -> 0 bytes .../embedder_tests/bug_750568_page3.dump.txt | 7 ++ .../embedder_tests/bug_750568_page3_agg.png | Bin 221 -> 0 bytes .../embedder_tests/bug_750568_page3_skia.png | Bin 242 -> 0 bytes .../embedder_tests/bug_750568_page4.dump.txt | 7 ++ .../embedder_tests/bug_750568_page4_agg.png | Bin 223 -> 0 bytes .../embedder_tests/bug_750568_page4_skia.png | Bin 244 -> 0 bytes .../import_page_to_xobject.dump.txt | 28 ++++++ .../import_page_to_xobject_agg.png | Bin 1269 -> 0 bytes .../import_page_to_xobject_skia.png | Bin 1787 -> 0 bytes ...ort_page_to_xobject_with_same_doc.dump.txt | 36 +++++++ ...port_page_to_xobject_with_same_doc_agg.png | Bin 567 -> 0 bytes ...ort_page_to_xobject_with_same_doc_skia.png | Bin 758 -> 0 bytes .../rectangles_multi_pages_2_in_1.dump.txt | 20 ++++ .../rectangles_multi_pages_2_in_1_agg.png | Bin 1474 -> 0 bytes .../rectangles_multi_pages_2_in_1_skia.png | Bin 1481 -> 0 bytes .../rectangles_multi_pages_3_in_1.dump.txt | 27 ++++++ .../rectangles_multi_pages_3_in_1_agg.png | Bin 1791 -> 0 bytes .../rectangles_multi_pages_3_in_1_skia.png | Bin 1766 -> 0 bytes 38 files changed, 242 insertions(+), 54 deletions(-) create mode 100644 testing/resources/embedder_tests/bad_page_type_new_page1.dump.txt delete mode 100644 testing/resources/embedder_tests/bad_page_type_new_page1_agg.png delete mode 100644 testing/resources/embedder_tests/bad_page_type_new_page1_skia.png create mode 100644 testing/resources/embedder_tests/bad_page_type_new_page2.dump.txt delete mode 100644 testing/resources/embedder_tests/bad_page_type_new_page2.png create mode 100644 testing/resources/embedder_tests/bug_1229106_rect.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_1229106_rect.png create mode 100644 testing/resources/embedder_tests/bug_1229106_two_up.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_1229106_two_up.png create mode 100644 testing/resources/embedder_tests/bug_40162073.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_40162073.png create mode 100644 testing/resources/embedder_tests/bug_40162073_wrong.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_40162073_wrong.png create mode 100644 testing/resources/embedder_tests/bug_750568_page1.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_750568_page1_agg.png delete mode 100644 testing/resources/embedder_tests/bug_750568_page1_skia.png create mode 100644 testing/resources/embedder_tests/bug_750568_page2.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_750568_page2_agg.png delete mode 100644 testing/resources/embedder_tests/bug_750568_page2_skia.png create mode 100644 testing/resources/embedder_tests/bug_750568_page3.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_750568_page3_agg.png delete mode 100644 testing/resources/embedder_tests/bug_750568_page3_skia.png create mode 100644 testing/resources/embedder_tests/bug_750568_page4.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_750568_page4_agg.png delete mode 100644 testing/resources/embedder_tests/bug_750568_page4_skia.png create mode 100644 testing/resources/embedder_tests/import_page_to_xobject.dump.txt delete mode 100644 testing/resources/embedder_tests/import_page_to_xobject_agg.png delete mode 100644 testing/resources/embedder_tests/import_page_to_xobject_skia.png create mode 100644 testing/resources/embedder_tests/import_page_to_xobject_with_same_doc.dump.txt delete mode 100644 testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_agg.png delete mode 100644 testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2_in_1.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2_in_1_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2_in_1_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3_in_1.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3_in_1_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3_in_1_skia.png diff --git a/fpdfsdk/fpdf_ppo_embeddertest.cpp b/fpdfsdk/fpdf_ppo_embeddertest.cpp index 1a0f60c44f..adaf336641 100644 --- a/fpdfsdk/fpdf_ppo_embeddertest.cpp +++ b/fpdfsdk/fpdf_ppo_embeddertest.cpp @@ -27,7 +27,6 @@ #include "public/fpdf_save.h" #include "public/fpdfview.h" #include "testing/embedder_test.h" -#include "testing/embedder_test_constants.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/utils/file_util.h" #include "testing/utils/path_service.h" @@ -152,14 +151,12 @@ TEST_F(FPDFPPOEmbedderTest, NupRenderImage) { ASSERT_TRUE(output_doc_3up); ASSERT_EQ(kRectanglesMultiPagesPageCount, FPDF_GetPageCount(output_doc_3up.get())); + for (int i = 0; i < kRectanglesMultiPagesPageCount; ++i) { ScopedFPDFPage page(FPDF_LoadPage(output_doc_3up.get(), i)); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - EXPECT_EQ(792, FPDFBitmap_GetWidth(bitmap.get())); - EXPECT_EQ(612, FPDFBitmap_GetHeight(bitmap.get())); - CompareBitmapWithExpectationSuffix(bitmap.get(), - RectanglesMultiPagesPagePath(i)); + CompareDisplayList(RenderPageToDisplayList(page.get()), + RectanglesMultiPagesPagePath(i)); } } @@ -188,9 +185,8 @@ TEST_F(FPDFPPOEmbedderTest, ImportPageToXObject) { FPDFPage_InsertObject(page.get(), page_object); EXPECT_TRUE(FPDFPage_GenerateContent(page.get())); - ScopedFPDFBitmap page_bitmap = RenderPage(page.get()); - CompareBitmapWithExpectationSuffix(page_bitmap.get(), - "import_page_to_xobject"); + CompareDisplayList(RenderPageToDisplayList(page.get()), + "import_page_to_xobject"); float left; float bottom; @@ -225,11 +221,8 @@ TEST_F(FPDFPPOEmbedderTest, ImportPageToXObject) { ASSERT_EQ(FPDF_PAGEOBJ_FORM, FPDFPageObj_GetType(xobjects[i])); EXPECT_EQ(8, FPDFFormObj_CountObjects(xobjects[i])); - { - ScopedFPDFBitmap page_bitmap = RenderPage(saved_pages[i].get()); - CompareBitmapWithExpectationSuffix(page_bitmap.get(), - "import_page_to_xobject"); - } + CompareDisplayList(RenderSavedPageToDisplayList(saved_pages[i].get()), + "import_page_to_xobject"); } for (int i = 0; i < kExpectedPageCount; ++i) { @@ -269,10 +262,7 @@ TEST_F(FPDFPPOEmbedderTest, ImportPageToXObjectWithSameDoc) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - { - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kRectanglesPng); - } + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), "rectangles"); FPDF_PAGEOBJECT page_object = FPDF_NewFormObjectFromXObject(xobject); ASSERT_TRUE(page_object); @@ -284,17 +274,14 @@ TEST_F(FPDFPPOEmbedderTest, ImportPageToXObjectWithSameDoc) { FPDFPage_InsertObject(page.get(), page_object); EXPECT_TRUE(FPDFPage_GenerateContent(page.get())); - { - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), - "import_page_to_xobject_with_same_doc"); - } + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + "import_page_to_xobject_with_same_doc"); FPDF_CloseXObject(xobject); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - VerifySavedDocumentWithExpectationSuffix( - "import_page_to_xobject_with_same_doc"); + + VerifySavedDocumentWithDisplayList("import_page_to_xobject_with_same_doc"); } TEST_F(FPDFPPOEmbedderTest, XObjectNullParams) { @@ -340,9 +327,9 @@ TEST_F(FPDFPPOEmbedderTest, Bug1229106) { // Show all pages render the same. ASSERT_EQ(kPageCount, FPDF_GetPageCount(document())); for (int i = 0; i < kPageCount; ++i) { - ScopedPage page = LoadScopedPage(0); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmap(bitmap.get(), "bug_1229106_rect"); + ScopedPage page = LoadScopedPage(i); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + "bug_1229106_rect"); } // Create a 2-up PDF. @@ -351,8 +338,8 @@ TEST_F(FPDFPPOEmbedderTest, Bug1229106) { ASSERT_EQ(kTwoUpPageCount, FPDF_GetPageCount(output_doc_2up.get())); for (int i = 0; i < kTwoUpPageCount; ++i) { ScopedFPDFPage page(FPDF_LoadPage(output_doc_2up.get(), i)); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmap(bitmap.get(), "bug_1229106_two_up"); + CompareDisplayList(RenderPageToDisplayList(page.get()), + "bug_1229106_two_up"); } } @@ -550,10 +537,8 @@ TEST_F(FPDFPPOEmbedderTest, Bug750568) { for (size_t i = 0; i < 4; ++i) { ScopedPage page = LoadScopedPage(i); ASSERT_TRUE(page); - - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix( - bitmap.get(), "bug_750568_page" + std::to_string(i + 1)); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + "bug_750568_page" + std::to_string(i + 1)); } ScopedFPDFDocument output_doc(FPDF_CreateNewDocument()); @@ -566,10 +551,8 @@ TEST_F(FPDFPPOEmbedderTest, Bug750568) { for (size_t i = 0; i < 4; ++i) { ScopedFPDFPage page(FPDF_LoadPage(output_doc.get(), i)); ASSERT_TRUE(page); - - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmapWithExpectationSuffix( - bitmap.get(), "bug_750568_page" + std::to_string(i + 1)); + CompareDisplayList(RenderPageToDisplayList(page.get()), + "bug_750568_page" + std::to_string(i + 1)); } } @@ -577,8 +560,7 @@ TEST_F(FPDFPPOEmbedderTest, Bug40162073) { ASSERT_TRUE(OpenDocument("bug_40162073.pdf")); ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmap(bitmap.get(), "bug_40162073"); + CompareDisplayList(RenderPageToDisplayList(page.get()), "bug_40162073"); ScopedFPDFDocument new_doc(FPDF_CreateNewDocument()); ASSERT_TRUE(new_doc); @@ -590,9 +572,9 @@ TEST_F(FPDFPPOEmbedderTest, Bug40162073) { EXPECT_EQ(1, FPDF_GetPageCount(new_doc.get())); ScopedFPDFPage new_page(FPDF_LoadPage(new_doc.get(), 0)); ASSERT_TRUE(new_page); - ScopedFPDFBitmap new_bitmap = RenderPage(new_page.get()); // TODO(crbug.com/40162073): Should render with "bug_40162073" expectation. - CompareBitmap(new_bitmap.get(), "bug_40162073_wrong"); + CompareDisplayList(RenderPageToDisplayList(new_page.get()), + "bug_40162073_wrong"); } TEST_F(FPDFPPOEmbedderTest, ImportWithZeroLengthStream) { @@ -600,8 +582,7 @@ TEST_F(FPDFPPOEmbedderTest, ImportWithZeroLengthStream) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kHelloWorldPng); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), "hello_world"); ScopedFPDFDocument new_doc(FPDF_CreateNewDocument()); ASSERT_TRUE(new_doc); @@ -613,8 +594,7 @@ TEST_F(FPDFPPOEmbedderTest, ImportWithZeroLengthStream) { EXPECT_EQ(1, FPDF_GetPageCount(new_doc.get())); ScopedFPDFPage new_page(FPDF_LoadPage(new_doc.get(), 0)); ASSERT_TRUE(new_page); - ScopedFPDFBitmap new_bitmap = RenderPage(new_page.get()); - CompareBitmapWithExpectationSuffix(new_bitmap.get(), pdfium::kHelloWorldPng); + CompareDisplayList(RenderPageToDisplayList(new_page.get()), "hello_world"); } TEST_F(FPDFPPOEmbedderTest, ImportWithSelfReferentialPageParent) { @@ -682,14 +662,14 @@ TEST_F(FPDFPPOEmbedderTest, ImportIntoDocWithWrongPageType) { { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), "bad_page_type_new_page1"); + CompareDisplayList(RenderPageToDisplayList(page.get()), + "bad_page_type_new_page1"); } { ScopedPage page = LoadScopedPage(1); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmap(bitmap.get(), "bad_page_type_new_page2"); + CompareDisplayList(RenderPageToDisplayList(page.get()), + "bad_page_type_new_page2"); } EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); @@ -700,14 +680,14 @@ TEST_F(FPDFPPOEmbedderTest, ImportIntoDocWithWrongPageType) { { ScopedSavedPage page = LoadScopedSavedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), "bad_page_type_new_page1"); + CompareDisplayList(RenderSavedPageToDisplayList(page.get()), + "bad_page_type_new_page1"); } { ScopedSavedPage page = LoadScopedSavedPage(1); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderPage(page.get()); - CompareBitmap(bitmap.get(), "bad_page_type_new_page2"); + CompareDisplayList(RenderSavedPageToDisplayList(page.get()), + "bad_page_type_new_page2"); } } diff --git a/testing/resources/embedder_tests/bad_page_type_new_page1.dump.txt b/testing/resources/embedder_tests/bad_page_type_new_page1.dump.txt new file mode 100644 index 0000000000..b2d23ce470 --- /dev/null +++ b/testing/resources/embedder_tests/bad_page_type_new_page1.dump.txt @@ -0,0 +1,14 @@ +SaveState +SetBaseClip [0,0,200,300] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,300.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,300.0000) line(0.0000,300.0000,close)] +SaveState +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(0.0000,290.0000) line(10.0000,290.0000) line(10.0000,300.0000) line(0.0000,300.0000) line(0.0000,290.0000,close)] +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(10.0000,150.0000) line(60.0000,150.0000) line(60.0000,180.0000) line(10.0000,180.0000) line(10.0000,150.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(190.0000,290.0000) line(200.0000,290.0000) line(200.0000,300.0000) line(190.0000,300.0000) line(190.0000,290.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(70.0000,232.0000) line(120.0000,232.0000) line(120.0000,262.0000) line(70.0000,262.0000) line(70.0000,232.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(190.0000,0.0000) line(200.0000,0.0000) line(200.0000,10.0000) line(190.0000,10.0000) line(190.0000,0.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(130.0000,150.0000) line(180.0000,150.0000) line(180.0000,180.0000) line(130.0000,180.0000) line(130.0000,150.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(0.0000,0.0000) line(10.0000,0.0000) line(10.0000,10.0000) line(0.0000,10.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(70.0000,67.0000) line(120.0000,67.0000) line(120.0000,97.0000) line(70.0000,97.0000) line(70.0000,67.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bad_page_type_new_page1_agg.png b/testing/resources/embedder_tests/bad_page_type_new_page1_agg.png deleted file mode 100644 index ee652fa5aed468d008812531cc094a3b99effcee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQby%2ztdc7adx4aCfKP}kkY-?zXJDvjVEB(l z*VotY-@pGqP~!i8$7Ofl0`+Tnx;TbZ+!)M#>PKZlO7q^F|@nrDG3G4e+CL&Pgg&ebxsLQ0OClG$^ZZW diff --git a/testing/resources/embedder_tests/bad_page_type_new_page1_skia.png b/testing/resources/embedder_tests/bad_page_type_new_page1_skia.png deleted file mode 100644 index cc2399dcedce810556c32af0e7c16d3a892733fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvT%Ttc@x>JwS@FILO_JVcj{Imq3nXfKP}k zkY-@8XJBw(V5nzcXkcLYkBe7dUk{XSXlVEkRP_J<{BNQHKm)gVx;TbZ++U2WjLz8Dt*s*v2Rw))NU`dI`9>Kj^oy<4x zzuR%|R*afTy#i67zV*p0p$+GEX{T_Vd|PB#xNCc-DbS*C6C>EcPDCSutd_hK`kg9l zeS1nn?X}V*Ry27W+)4Ro4&9sZ(o*G`_%DU)AEw^m#^MJSpeO!&t-0X)CMQ{}to;c; zHZ@qqp0J-NWVSn(@%PsUo16p3CHty(Uuk)`;r6R^heyIKvY=4)kn^a&ao!0iz`fzD Z^d6Iv7Q07B4*?^e!PC{xWt~$(698X@q!9oB diff --git a/testing/resources/embedder_tests/bad_page_type_new_page2.dump.txt b/testing/resources/embedder_tests/bad_page_type_new_page2.dump.txt new file mode 100644 index 0000000000..c082270ce4 --- /dev/null +++ b/testing/resources/embedder_tests/bad_page_type_new_page2.dump.txt @@ -0,0 +1,7 @@ +SaveState +SetBaseClip [0,0,200,100] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,100.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,100.0000) line(0.0000,100.0000,close)] +SaveState +FillRect [50,30,60,40] color=0xffff0000 +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bad_page_type_new_page2.png b/testing/resources/embedder_tests/bad_page_type_new_page2.png deleted file mode 100644 index fee6eaf3bcf8dbd74ce1db0870697c85a0ff2171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^CxAGGkr_z-^myw5q!^2X+?^QKos)S9)AW%fr)5S5w<9PCqer|)FQ$Xl4lljkLqs1>1Leij+jfcVM-@12`Co(Jm PYGCkm^>bP0l+XkKUSKC) diff --git a/testing/resources/embedder_tests/bug_1229106_rect.dump.txt b/testing/resources/embedder_tests/bug_1229106_rect.dump.txt new file mode 100644 index 0000000000..77eebe1a76 --- /dev/null +++ b/testing/resources/embedder_tests/bug_1229106_rect.dump.txt @@ -0,0 +1,11 @@ +SaveState +SetBaseClip [0,0,792,612] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,612.0000) line(0.0000,0.0000) line(792.0000,0.0000) line(792.0000,612.0000) line(0.0000,612.0000,close)] +SaveState +FillRect [100,342,250,392] color=0xff000000 +FillRect [0,562,100,612] color=0xffff0000 +FillRect [0,0,100,50] color=0xff00ff00 +FillRect [692,0,792,50] color=0xff0000ff +FillRect [692,562,792,612] color=0xffff00ff +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_1229106_rect.png b/testing/resources/embedder_tests/bug_1229106_rect.png deleted file mode 100644 index 9fa2f2cbf6ae0d63348c6d8f0c44376293f54d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmeAS@N?(olHy`uVBq!ia0y~yV3uHDU`kk44ofy`glX(f`2nG0r zxB_VghW}s)B7k7axyDmKy;Ytrjv*Dd-rl*$*1TG1_>N&JO`244T=&5EKqSU8>09i zg56Ue-Y&a?2T25E)L|~LQ3z$|3Y-lnv=`#wk!Hvm2HcUgcHL3;b*1t03^Bk+L<)I{ zCQu}z#4?&8K*jLb2Wi~0@Rgy-bTnP4CXk#?23>q9XTIg^FNvQ0s#LNr818-25a a%GvVO2Am~3jxC!3%9@_8elF{r5}E)un*`qg diff --git a/testing/resources/embedder_tests/bug_1229106_two_up.dump.txt b/testing/resources/embedder_tests/bug_1229106_two_up.dump.txt new file mode 100644 index 0000000000..056a7da689 --- /dev/null +++ b/testing/resources/embedder_tests/bug_1229106_two_up.dump.txt @@ -0,0 +1,20 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +SaveState +FillRect [114,221,212,254] color=0xff000000 +FillRect [50,363,115,396] color=0xffff0000 +FillRect [50,0,115,33] color=0xff00ff00 +FillRect [497,0,562,33] color=0xff0000ff +FillRect [497,363,562,396] color=0xffff00ff +RestoreState +SaveState +FillRect [114,617,212,650] color=0xff000000 +FillRect [50,759,115,792] color=0xffff0000 +FillRect [50,396,115,429] color=0xff00ff00 +FillRect [497,396,562,429] color=0xff0000ff +FillRect [497,759,562,792] color=0xffff00ff +RestoreState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_1229106_two_up.png b/testing/resources/embedder_tests/bug_1229106_two_up.png deleted file mode 100644 index 4dce79da5d50c493f7c021477cfc364b10fca8f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmeAS@N?(olHy`uVBq!ia0y~yU`k5eo1L zaRt&04FACpL;%5-bB(7M7+6$2T^vIyZoR#5kn@0ofJ#p=_zbKBJpy=GjBWaX!f*@m)t`S5nREHB-A0~OC1#BKBIe`;w z4<@N747MMcbXEhq2$O8{0lO5FF~db_HJnG5Y7z1FoA|1W^#szU`f=FAS5Me^GGt`$p=dnvmI@}fBeZpg0rJj^wlGl U@G47nDu7B6Pgg&ebxsLQ0Q#7QU;qFB diff --git a/testing/resources/embedder_tests/bug_40162073.dump.txt b/testing/resources/embedder_tests/bug_40162073.dump.txt new file mode 100644 index 0000000000..430809fc5e --- /dev/null +++ b/testing/resources/embedder_tests/bug_40162073.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +FillRect [50,125,150,175] color=0xff0000ff +FillRect [50,75,150,125] color=0xff00ff00 +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_40162073.png b/testing/resources/embedder_tests/bug_40162073.png deleted file mode 100644 index b37b0ce7a6af8923c695f694c61c0335f5e89ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4oB=)|t_%$SLGb_o+x<>?KtXR$ z7srr{dv9+jGBPOeFdWSMmFUraaKa=OVUJ^b_cO`=-sK>`;s`+#wx4+A$qeDFbWT$- kg-9&nD|8oR`PnRUszGGm4wlC&fyOd;y85}Sb4q9e0Q}l6g8%>k diff --git a/testing/resources/embedder_tests/bug_40162073_wrong.dump.txt b/testing/resources/embedder_tests/bug_40162073_wrong.dump.txt new file mode 100644 index 0000000000..6e99c9f157 --- /dev/null +++ b/testing/resources/embedder_tests/bug_40162073_wrong.dump.txt @@ -0,0 +1,9 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +FillRect [50,125,150,175] color=0xff0000ff +FillRect [50,75,150,125] color=0xff00ff00 +FillRect [50,25,150,75] color=0xffff0000 +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_40162073_wrong.png b/testing/resources/embedder_tests/bug_40162073_wrong.png deleted file mode 100644 index 71b259a5551b72ef111c079ee6e2c5bb7577903e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4JOMr-t_%$S!I0tq|Nmn1vv&c- zgFRgwLo)8Yy}6L_fC3N0!JG>(FWlunoF&1t%ts(l`rTjO4ujAX~4?O=?#hwOkTFZFVdQ&MBb@02<9SrT_o{ diff --git a/testing/resources/embedder_tests/bug_750568_page1_skia.png b/testing/resources/embedder_tests/bug_750568_page1_skia.png deleted file mode 100644 index a2795b67239e60f0beb2aa311f3a25674a023ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5q8Ax6*bK?b4jKx9jP7LeL$-D$|cmjMvT!D0b zeSJei!~g&P&4qOMf&2hZ7srr{dvC8U`hs*FdxY;Qab<~yYQebHMP zqrlOGK=l(Z230R{U!?>Td_Q^pk~gA`0xVGUPMuqcHT6EHl=df}*$kepelF{r5}E+^ CW;Oi) diff --git a/testing/resources/embedder_tests/bug_750568_page2.dump.txt b/testing/resources/embedder_tests/bug_750568_page2.dump.txt new file mode 100644 index 0000000000..0453beab65 --- /dev/null +++ b/testing/resources/embedder_tests/bug_750568_page2.dump.txt @@ -0,0 +1,7 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,200.0000] points=[move(70.0000,135.0000) line(120.0000,135.0000) line(120.0000,165.0000) line(70.0000,165.0000) line(70.0000,135.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_750568_page2_agg.png b/testing/resources/embedder_tests/bug_750568_page2_agg.png deleted file mode 100644 index 4bf3b870f05b8bc237b3e2c03bdb2379e52e21d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*Tp1YT85rsr82;DS*YDrI z|NsC09jC(|0cG1fT^vIyZoR#3DA-^i;&Si^;}OP)6AFy1EdRq+%=Fy#fjez}WA6J) zvH?vF3IZG~OpQS5#Og5jxt}L!um3wOSt;mSois$4gXL4PN>V|440|~rSRGV3A*$vA Z^8y{8Ip5zn9|O9G!PC{xWt~$(6952IL_z=n diff --git a/testing/resources/embedder_tests/bug_750568_page2_skia.png b/testing/resources/embedder_tests/bug_750568_page2_skia.png deleted file mode 100644 index 0d1eace71f4ee67f588bb00935df46911a4a3761..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc7>k44ofy`glX(f`NCfzVxH2%< zGcY(XFw`?JG%zsyudlCfXlVHV|Nociyp=#Tot`d^Ar-gYUU%eda1d~~c$7;mKu5vt z0#_2V@{X^z+?%&My4=(MaBlwGO(}i#Mej#>$AFGv@O1TaS?83{1OViCNYVfR diff --git a/testing/resources/embedder_tests/bug_750568_page3.dump.txt b/testing/resources/embedder_tests/bug_750568_page3.dump.txt new file mode 100644 index 0000000000..7144cdc245 --- /dev/null +++ b/testing/resources/embedder_tests/bug_750568_page3.dump.txt @@ -0,0 +1,7 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,200.0000] points=[move(130.0000,80.0000) line(180.0000,80.0000) line(180.0000,110.0000) line(130.0000,110.0000) line(130.0000,80.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_750568_page3_agg.png b/testing/resources/embedder_tests/bug_750568_page3_agg.png deleted file mode 100644 index 4e391796767366f925b3905ca818e44efc28320a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*Tp8pU80r}q{xj6q*YDrI z|NsC0udn%ml(%`hIEGZ*dV4*Pw?RRoH84ZL>;hL0hnm3e@Qn=nHr5}WyZ%7sUUOSU zRSp)WMh67}>{N>DlI!c&Ri2o8ddFH{mv6;)7-4Gv$aG5FQM`U|ZZj^;C!$Vp@BHgC UN8fv19?(S$p00i_>zopr0D!kf5&!@I diff --git a/testing/resources/embedder_tests/bug_750568_page3_skia.png b/testing/resources/embedder_tests/bug_750568_page3_skia.png deleted file mode 100644 index 6c815ee643cfcac43f64d2143b1e8e0eb0937996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc7>k44ofy`glX(f`NCfzVxH8x? zFgP$U)H5(NFfjaQsIRYYXlVHV|G)m-a&e%V4o?@ykcwMxuOH-fa1dd**ee#|V4~o) zfc0XdP|k0uAJxAnKJaCJZ?n`cpwU4=fP;kz2Nl;jXRXl0)zXjKlm%yQ+aU^5_tWB% oeqpgv(DyJuZkQN`5&K>9j&ECiajsKJBhXC@p00i_>zopr0Ot-z_y7O^ diff --git a/testing/resources/embedder_tests/bug_750568_page4.dump.txt b/testing/resources/embedder_tests/bug_750568_page4.dump.txt new file mode 100644 index 0000000000..a6750ff539 --- /dev/null +++ b/testing/resources/embedder_tests/bug_750568_page4.dump.txt @@ -0,0 +1,7 @@ +SaveState +SetBaseClip [0,0,200,200] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,200.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,200.0000) line(0.0000,200.0000,close)] +SaveState +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,200.0000] points=[move(70.0000,25.0000) line(120.0000,25.0000) line(120.0000,55.0000) line(70.0000,55.0000) line(70.0000,25.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_750568_page4_agg.png b/testing/resources/embedder_tests/bug_750568_page4_agg.png deleted file mode 100644 index c20d4a024a91e3a36af3c00ade56a4a6c4c0b97c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qcgaUj*T;&-U>Vc@fe*gac{}~wm z|Ns9-^Z7KOY=@_dV@SoVx7Qtc8w>By1o>icT-+JIOhm4k>v~1;+h3n UO`<;6fNo;&boFyt=akR{0Q$>EQUCw| diff --git a/testing/resources/embedder_tests/bug_750568_page4_skia.png b/testing/resources/embedder_tests/bug_750568_page4_skia.png deleted file mode 100644 index b73cec2643e52ebdf1876ace9178f2352ee1b57c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc7>k44ofy`glX(f`NCfzVxY{!? zI505O15tf_0|P@tL&JXthX4QnZ)LwI4^-3T>EaktaqI1ML*51l0fvM8QU(mHY#J*( zH#9IeF@O4ISm0l(*m6c{MwNH%LZ(Is1py8g;;Bz}?r90`++~;-AvE!2k2Os5g!#&U m#kQ*{mF7L&0u|fWdPhm;?;FwS9`Qg|F?hQAxvX&?{{tod|94z=_bmehOQ)xcV@SoVw|5TmHW@Iq1*R1+7c$Rmk93ps%kB#uHV3WG$jkj`o#aV%t;4@evfIRK7#ZXn*L5Wi#bDI^52_!JTX#Q78w zaoC~>5`9>r2@-w8MH6X`pM0`ySIqJD(8y`oDViy>SFPFxjxumq)tpLG*uC#{vFv|| zzVH1nx5wa%&21H%&U+|?_3PX-aP8dsZbI*bz3l!QkxT<8S8$?&dJ|z$otkm7r>gNZ zFE!*Oh9#J>1TZ9t0Ta|y_1Q(Dzy7Za04AIe#J*<^R?#Mn)C_k_RY-j+iI e!_O&m_lt+{huuxr%Qy}yzC2z1T-G@yGywqc5XyxB diff --git a/testing/resources/embedder_tests/import_page_to_xobject_skia.png b/testing/resources/embedder_tests/import_page_to_xobject_skia.png deleted file mode 100644 index 5ddcd98f0a064dfe8213e5fbf538b0b51d263885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmeAS@N?(olHy`uVBq!ia0y~yU`kg~7U*0M7*H>;CW-t6$^ozoh) zIX${1^R?+Fqqo5smR~B;KkWZ0^?g6f8*p$?JBzq|4y!URUNO5@xx0AV%&0w8F)1fY zHGkU%_U^R>rE=m6miuc<#N5uxy)F*ieqz$=#FO*pKMIha`1XtGjmdCBs9G?CO>K_v zy;z$6Fz=<}rq4FkTYLVRmPM`mcQa<2^vy|OSLEv7PCwzZ)E22)C}`ezj{mH_?YFS! g&yy3iZhz&hakYLXzO?EVu-anqboFyt=akR{0Qgl=egFUf diff --git a/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc.dump.txt b/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc.dump.txt new file mode 100644 index 0000000000..9965e3fb6a --- /dev/null +++ b/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc.dump.txt @@ -0,0 +1,36 @@ +SaveState +SetBaseClip [0,0,200,300] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,300.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,300.0000) line(0.0000,300.0000,close)] +SaveState +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(0.0000,290.0000) line(10.0000,290.0000) line(10.0000,300.0000) line(0.0000,300.0000) line(0.0000,290.0000,close)] +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(10.0000,150.0000) line(60.0000,150.0000) line(60.0000,180.0000) line(10.0000,180.0000) line(10.0000,150.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(190.0000,290.0000) line(200.0000,290.0000) line(200.0000,300.0000) line(190.0000,300.0000) line(190.0000,290.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(70.0000,232.0000) line(120.0000,232.0000) line(120.0000,262.0000) line(70.0000,262.0000) line(70.0000,232.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(190.0000,0.0000) line(200.0000,0.0000) line(200.0000,10.0000) line(190.0000,10.0000) line(190.0000,0.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(130.0000,150.0000) line(180.0000,150.0000) line(180.0000,180.0000) line(130.0000,180.0000) line(130.0000,150.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(0.0000,0.0000) line(10.0000,0.0000) line(10.0000,10.0000) line(0.0000,10.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] points=[move(70.0000,67.0000) line(120.0000,67.0000) line(120.0000,97.0000) line(70.0000,97.0000) line(70.0000,67.0000,close)] +SaveState +RestoreState +SetClip_PathFill rule=winding matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,0.0000) line(0.0000,300.0000) line(200.0000,300.0000) line(200.0000,0.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,290.0000) line(10.0000,290.0000) line(10.0000,300.0000) line(0.0000,300.0000) line(0.0000,290.0000,close)] +RestoreState +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(10.0000,150.0000) line(60.0000,150.0000) line(60.0000,180.0000) line(10.0000,180.0000) line(10.0000,150.0000,close)] +RestoreState +SetClip_PathFill rule=winding matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,0.0000) line(0.0000,300.0000) line(200.0000,300.0000) line(200.0000,0.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(190.0000,290.0000) line(200.0000,290.0000) line(200.0000,300.0000) line(190.0000,300.0000) line(190.0000,290.0000,close)] +RestoreState +DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(70.0000,232.0000) line(120.0000,232.0000) line(120.0000,262.0000) line(70.0000,262.0000) line(70.0000,232.0000,close)] +RestoreState +SetClip_PathFill rule=winding matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,0.0000) line(0.0000,300.0000) line(200.0000,300.0000) line(200.0000,0.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(190.0000,0.0000) line(200.0000,0.0000) line(200.0000,10.0000) line(190.0000,10.0000) line(190.0000,0.0000,close)] +RestoreState +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(130.0000,150.0000) line(180.0000,150.0000) line(180.0000,180.0000) line(130.0000,180.0000) line(130.0000,150.0000,close)] +RestoreState +SetClip_PathFill rule=winding matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,0.0000) line(0.0000,300.0000) line(200.0000,300.0000) line(200.0000,0.0000) line(0.0000,0.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(0.0000,0.0000) line(10.0000,0.0000) line(10.0000,10.0000) line(0.0000,10.0000) line(0.0000,0.0000,close)] +RestoreState +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[0.5000,0.0000,0.0000,-0.5000,0.0000,300.0000] points=[move(70.0000,67.0000) line(120.0000,67.0000) line(120.0000,97.0000) line(70.0000,97.0000) line(70.0000,67.0000,close)] +RestoreState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_agg.png b/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_agg.png deleted file mode 100644 index 7522d81664c95d2028f658782f11f9fb8a953336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQby%2ztdc7adx4ZefKP}kkY-?zXJDvjVEB(r z+cPlO+uH+0>+9?HGcfGmzyCi_#sB|pDcqSrgARGRIEGZ*dVBYv?_mRpw#558H##0- zJIRwXVUwd3^C^y47EPzX=&kG<0?ZN`WvZSZU=q~wa#$g>?1_1w_p9&L+iRCB+g5K~ zwkl+Lm3`2y(-wWorbb0mmt`_BF&Ql|e5JR0;MCYob0@OgUjAc*q33Z zx=L0l_Gi8qP&E`3J?rRix_$ae<4YM1bZ{bb!hRhFzRLXmEw7ee*{}5W>zO%g$~x|x zIeXF(X1c>U8Ofjm?NY^=R%;%eNP2Zav1!faBS}IcI-lOo;&IwiH)+qli?b?iI5<33 zcqDIL?bo#?=Nr4%#I0xj+yw*#CI|@V@7*x{V~e323lOC2>X^^2EV9(He5>=4D%0nz zDVI)s%vyJmzkB`t%bQI%*;KJ76z@0|-`kSI|30h%1T5aS?(I?U`KX}oQX_K5MuHJ! zj!H&~=55=IcAHyMxD-Gj_|+@PI;f-ni9UL&|B&ls&{m7TANTr%zTHuKYo2my%1N7f^?In+gts>QQktitJ(H)zP2Oj?kNHAxW>#i!^l4B6@O1Ta JS?83{1ORBF-ADic diff --git a/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_skia.png b/testing/resources/embedder_tests/import_page_to_xobject_with_same_doc_skia.png deleted file mode 100644 index dd2cd5763dbf8b4843abea4c00ffbb2e44882456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvT%Ttc@x>JwS@FILO_JVcj{Imq3nFfKP}k zkY-@8XJBw(V5nzcXkcLYkCo@(-~g1audfHHXlQ8IzkmOM0|)*CRsa9rGN;Xvfq^N> z)5S5Q;?~={x%smVMA!nRFIjA&sek*&|N2rTuZ6*dc;>-)RQ$J9i=prQ z*j>vHo4THmE~?n~jDraTHpvCatk-lhUUuH#^4<1-j$lDlVv_xm=(#3}m#<%4syWL< zF}bonvrhpVSm}IB^rH9V48h-ryIw4PdAa3{yZ|v^!vEGcS5+U_J@%WRx8_`|m|B^A zT-dUlOD%i$tn*<-bqs_z$!f`(uxGE8zLmHe?qZ3NVifJ;0! zcuV9B)=l-mIEMqFwm-9USNuD}Z4@1uAq@}43GB@_XYN;kwZjELM%gX7d9E&V*>3*j z8N7De3VLS0JRP7OX&%ERXnB~s!^;+Zwmg=$@U+Kawi_MiPwd#g?GN*2&biwb8qK%|OtB1}u6{1-oD!Moq@rFfx(l3 zA&h|`oPpsz1H%UfhW`u_5)x8UQZh0!va+&aVPWCn;S(lIm^g9bo;`c^?%jL*`0>k^ zFJHNG<^TWx(7#LVBJY5_^DsH{KyOFQSK*S-C>*xW6#sB~J^SB8X6bLR?^Yv&g zPD?sfy_0M5!!XAES;`EF4F(Pp3OoXA9Lz0@hY(yWLQoY9NUBgYVKoP$0>x+~O*kwE zsX$VN<`$fqFgyV_1K}^Y5X7};Mk8^l=}iS5oMD6J9waVKZ?0GsaX@mK<$tq7jAe;@ zhi+8#+>|#gVZYI8$&tMJr0vm^i82N~R^J&9%od8<=ZGG;IE}>>dIvm3KR%ywdDc(H z^?!`-l<&TMuD+04+0$6$!(sDxWxI2AD*2`eA3G{_=Abnq5#bDQ4rW~TG#KF2gcL1k z&L)X$gPxF6djhU88z3ay9|zh{V+7O3xQq(p=WxqU~3_zc%-hM(PbbmgHJ)zt?U ziy*0UBM^{CN)bk4_#Rp^pv4g~7ppnIG6-iN&?CJ(cyR9skDTYa+RjsT!#!q91glH{@&o$5T|i1i7ZIoMpYIUWwF&XF8lKudj;z` zY`gFNd7C%)qHfPS=8fz2yL=VxYrgyL`r+A+mo-{m@RK;5*}G>(b3QyR;fi!Tp>c=- zmnKwqp`==*FhlVOEYg3hO=0n0z3`vLIo@cA|H;`b6;qi|41gzSj6g$}hs#}9JoDjr z5Oem9J5~P-PS4UYFayZQFb0OOFdzyGXJ7~qXNXNoN@QS2Ok^l8 zFR!kzpD-s8uQpFDZ;)TvWv&YZb$;lkz1m# zILv|51z$pX9_ZUH-~UG@%1k-Y<;9o8x(jFLuP-$ga%-71^V@>iyEnT%>4BvUoUXze zV-G*vKUXcaIA+U+l!8MXw{LR1pF6iUkwf{*`6-tV#~Y{ToCBvlq+mxiADC_$6n|X4 zW`8x$pLf^J-)Sy~IxbdeOG+GDBgm=j7VY)`>M&RYYfOp%@U>*s;rPo&W{EBD3Z`_| z@HZGZZBJscNNzA#5F)?y-TK{?@=7;9N9s#_5C8c+alep*#C!AES8Mt&)ZE$Xf3RZz z-4na{{i_pY_GKIYT({mXYWajG_u7Tic?y28A?KDv7JSZzIS4IHF7V$N?>DpV$?koR zS-DP0ymj7~D07pw&f;6&$K0O^|C4=gE=%aSY9}Ij?8~gw1fTB*A4(I>JO4bFvYdZt zbhhI7RagB87O#!`sT|6=S2o>Qdo^Z*iJ^z|?U~;mt~*hy;VdD%b*|6ntXnfJa?)?N zTVwc%PPxuyeNdZv;k}bZ>&4fHspxra;P<@yn!(PiakMM~mBI~&Y8eZa+*3*q9ef9> O$vj>CT-G@yGywom>=X+C diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_3_in_1_skia.png b/testing/resources/embedder_tests/rectangles_multi_pages_3_in_1_skia.png deleted file mode 100644 index 3bb8009249c94249adf2f231bab0b68818edb6a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1766 zcmeAS@N?(olHy`uVBq!ia0y~yV3uHDU`pX&28t{-DUSeBjKx9jP7LeL$-D$|P6qgd zxB_Vg8ykk07>43vhKdS?`g(>PI~bllWBC7{jf;zoo10xwkX=rWT}g?9o10rtkI&MQ z&&5T+-d>b}K~$7M%fdq2(o)~b%9??}+M2O>k)~sE-cHO#ldl(q@>;a-Zd-v|$w{PG6{re9cI&|*b zxog+1y?*`rJp;r0_dxXi0|Uc{4?y(cB)b7GZXL6 zUwbbdTX1m+>z|S&76l#wHV)<%#zPE=4F(Pp2rd>Os0w6ND4MXE16F}*G?FG9mIGCw zyN3u(3>cn(YeM)7E(CEceZ1Mih%0R9B$lF`{Z8>v|n4WwS=il*Dn zS@u0mrH9RH@|o<*Yqi6_!_x&WZ#YO`iQ)j|f46>~%b73E`-@Gzr>go^vd~`cM2^MJ z9#!-|%sqS77M${M83_s*1^f71+Z7p;fAZeklI?ORV^QMs{(>G43Ez@DmUo7bgb0gT z$DgeC{nmf}e|^p02tl{IcW27^z0FrvJ^-@Ct5kFA98vpYrEg@ex-R{um?AOzW$r=# zCH>R2e}_oVe(8I$w!-$7T? Date: Fri, 16 Oct 2026 14:59:13 -0700 Subject: [PATCH 4/9] Use display list comparisons in parser decode embedder tests Replace bitmap comparisons in FPDFParserDecodeEmbedderTest with DisplayListRenderer assertions. This verifies stream decoding behavior, blank page generation, image drawing commands, and text rendering directly from display list output without rasterizing bitmaps, eliminating 1 obsolete golden PNG file. Change-Id: I89fbaab1c7cc61f938cd7e02cd509ff9e5e4b821 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160354 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- .../parser/fpdf_parser_decode_embeddertest.cpp | 17 +++++++---------- .../embedder_tests/bug_555784.dump.txt | 7 +++++++ .../resources/embedder_tests/bug_555784.png | Bin 314 -> 0 bytes 3 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 testing/resources/embedder_tests/bug_555784.dump.txt delete mode 100644 testing/resources/embedder_tests/bug_555784.png diff --git a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp index 0d8aa41805..9c49dcf23d 100644 --- a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp +++ b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp @@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "build/build_config.h" #include "core/fpdfapi/parser/fpdf_parser_decode.h" + #include "public/cpp/fpdf_scopers.h" #include "testing/embedder_test.h" -#include "testing/embedder_test_constants.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/test_support.h" @@ -14,24 +13,23 @@ using FPDFParserDecodeEmbedderTest = EmbedderTest; TEST_F(FPDFParserDecodeEmbedderTest, Bug552046) { // Tests specifying multiple image filters for a stream. Should not cause a - // crash when rendered. + // crash when rendered and should produce a blank page. ASSERT_TRUE(OpenDocument("bug_552046.pdf")); ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmap(bitmap.get(), pdfium::kBlankPage612By792Png); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + "blank_page_612x792"); } TEST_F(FPDFParserDecodeEmbedderTest, Bug555784) { // Tests bad input to the run length decoder that caused a heap overflow. // Should not cause a crash when rendered. The image is 81915 pixels wide // with 3277 DeviceN components at 16 bits each, which is a valid but - // enourmous pitch, so its one scanline does get decoded and drawn. + // enormous pitch, so its one scanline does get decoded and drawn. ASSERT_TRUE(OpenDocument("bug_555784.pdf")); ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmap(bitmap.get(), "bug_555784"); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), "bug_555784"); } TEST_F(FPDFParserDecodeEmbedderTest, Bug455199) { @@ -40,6 +38,5 @@ TEST_F(FPDFParserDecodeEmbedderTest, Bug455199) { ASSERT_TRUE(OpenDocument("bug_455199.pdf")); ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kHelloWorldPng); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), "hello_world"); } diff --git a/testing/resources/embedder_tests/bug_555784.dump.txt b/testing/resources/embedder_tests/bug_555784.dump.txt new file mode 100644 index 0000000000..94ebba5e82 --- /dev/null +++ b/testing/resources/embedder_tests/bug_555784.dump.txt @@ -0,0 +1,7 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +StartDIBits size=[81915,1] bpp=24 matrix=[4178.0000,0.0000,0.0000,-1.0000,0.0000,792.0000] alpha=1.0000 color=0x00000000 +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/bug_555784.png b/testing/resources/embedder_tests/bug_555784.png deleted file mode 100644 index 038433d90fd7c4af500e97ae2da6fc81246509a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0y~yU`kQ QfnI0uboFyt=akR{0GzItSO5S3 From e804c957606650443fc7ae5d4697bb363732c441 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 16 Oct 2026 16:14:27 -0700 Subject: [PATCH 5/9] Use display list comparisons in annotation embedder tests Replace bitmap comparisons in FPDFAnnotEmbedderTest with DisplayListRenderer assertions. This tests rollover appearances, annotation flag modifications, link annotation creation, and focus ring rendering directly against display list output instead of rasterized bitmaps, eliminating 17 obsolete golden PNG files. Change-Id: Icac252c643acb814e6e4c4b1223209c5c7fbb0ab Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160355 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- fpdfsdk/fpdf_annot_embeddertest.cpp | 68 ++++++++---------- .../annotation_highlight_rollover_ap.dump.txt | 8 +++ .../annotation_highlight_rollover_ap.png | Bin 337 -> 0 bytes .../embedder_tests/annots_page1.dump.txt | 27 +++++++ .../embedder_tests/annots_page1_agg.png | Bin 21946 -> 0 bytes .../embedder_tests/annots_page1_agg_mac.png | Bin 21275 -> 0 bytes .../annots_page1_focus_highlight.dump.txt | 28 ++++++++ .../annots_page1_focus_highlight_agg.png | Bin 21991 -> 0 bytes .../annots_page1_focus_highlight_agg_mac.png | Bin 21314 -> 0 bytes ...nnots_page1_focus_highlight_skia_linux.png | Bin 17951 -> 0 bytes .../annots_page1_focus_highlight_skia_mac.png | Bin 19702 -> 0 bytes .../annots_page1_focus_highlight_skia_win.png | Bin 6152 -> 0 bytes .../annots_page1_focus_link.dump.txt | 28 ++++++++ .../annots_page1_focus_link_agg.png | Bin 22042 -> 0 bytes .../annots_page1_focus_link_agg_mac.png | Bin 21368 -> 0 bytes .../annots_page1_focus_link_skia_linux.png | Bin 18005 -> 0 bytes .../annots_page1_focus_link_skia_mac.png | Bin 19767 -> 0 bytes .../annots_page1_focus_link_skia_win.png | Bin 6175 -> 0 bytes .../annots_page1_skia_linux.png | Bin 17908 -> 0 bytes .../embedder_tests/annots_page1_skia_mac.png | Bin 19658 -> 0 bytes .../embedder_tests/annots_page1_skia_win.png | Bin 6093 -> 0 bytes ...ender_annot_with_only_rollover_ap.dump.txt | 8 +++ ...not_render_annot_with_only_rollover_ap.png | Bin 324 -> 0 bytes 23 files changed, 130 insertions(+), 37 deletions(-) create mode 100644 testing/resources/embedder_tests/annotation_highlight_rollover_ap.dump.txt delete mode 100644 testing/resources/embedder_tests/annotation_highlight_rollover_ap.png create mode 100644 testing/resources/embedder_tests/annots_page1.dump.txt delete mode 100644 testing/resources/embedder_tests/annots_page1_agg.png delete mode 100644 testing/resources/embedder_tests/annots_page1_agg_mac.png create mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight.dump.txt delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight_agg.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight_agg_mac.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight_skia_linux.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight_skia_mac.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_highlight_skia_win.png create mode 100644 testing/resources/embedder_tests/annots_page1_focus_link.dump.txt delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_link_agg.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_link_agg_mac.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_link_skia_linux.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_link_skia_mac.png delete mode 100644 testing/resources/embedder_tests/annots_page1_focus_link_skia_win.png delete mode 100644 testing/resources/embedder_tests/annots_page1_skia_linux.png delete mode 100644 testing/resources/embedder_tests/annots_page1_skia_mac.png delete mode 100644 testing/resources/embedder_tests/annots_page1_skia_win.png create mode 100644 testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.dump.txt delete mode 100644 testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.png diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp index 5edebc0151..289a25b1e9 100644 --- a/fpdfsdk/fpdf_annot_embeddertest.cpp +++ b/fpdfsdk/fpdf_annot_embeddertest.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "build/build_config.h" @@ -438,11 +439,11 @@ TEST_F(FPDFAnnotEmbedderTest, RenderAnnotWithOnlyRolloverAP) { ASSERT_TRUE(page); // This annotation has a malformed appearance stream, which does not have its - // normal appearance defined, only its rollover appearance. In this case, its - // normal appearance should be generated, allowing the highlight annotation to - // still display. - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmap(bitmap.get(), "fpdf_annot_render_annot_with_only_rollover_ap"); + // normal appearance defined, only its rollover appearance. In this case, no + // normal appearance is rendered. + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "fpdf_annot_render_annot_with_only_rollover_ap"); } TEST_F(FPDFAnnotEmbedderTest, RenderMultilineMarkupAnnotWithoutAP) { @@ -687,10 +688,9 @@ TEST_F(FPDFAnnotEmbedderTest, AddAndSaveLinkAnnotation) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - { - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), pdfium::kHelloWorldPng); - } + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "hello_world"); EXPECT_EQ(0, FPDFPage_GetAnnotCount(page.get())); static constexpr char kUri[] = "https://pdfium.org/"; @@ -747,8 +747,9 @@ TEST_F(FPDFAnnotEmbedderTest, AddAndSaveLinkAnnotation) { ASSERT_TRUE(saved_doc); ScopedSavedPage saved_page = LoadScopedSavedPage(0); ASSERT_TRUE(saved_page); - VerifySavedRenderingWithExpectationSuffix(saved_page.get(), - pdfium::kHelloWorldPng); + CompareDisplayList( + RenderSavedPageWithFlagsToDisplayList(saved_page.get(), FPDF_ANNOT), + "hello_world"); EXPECT_EQ(1, FPDFPage_GetAnnotCount(saved_page.get())); ScopedFPDFAnnotation annot(FPDFPage_GetAnnot(saved_page.get(), 0)); @@ -1240,12 +1241,9 @@ TEST_F(FPDFAnnotEmbedderTest, ModifyAnnotationFlags) { ASSERT_TRUE(page); // Check that the page renders correctly. - static constexpr char kAnnotationHighlightRolloverApPng[] = - "annotation_highlight_rollover_ap"; - { - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmap(bitmap.get(), kAnnotationHighlightRolloverApPng); - } + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "annotation_highlight_rollover_ap"); { // Retrieve the annotation. @@ -1272,11 +1270,9 @@ TEST_F(FPDFAnnotEmbedderTest, ModifyAnnotationFlags) { EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT); // Check that the page renders correctly without rendering the annotation. - { - ScopedFPDFBitmap bitmap = - RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmap(bitmap.get(), pdfium::kBlankPage612By792Png); - } + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "blank_page_612x792"); // Unset the HIDDEN flag. EXPECT_TRUE(FPDFAnnot_SetFlags(annot.get(), FPDF_ANNOT_FLAG_NONE)); @@ -1288,11 +1284,9 @@ TEST_F(FPDFAnnotEmbedderTest, ModifyAnnotationFlags) { EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT); // Check that the page renders correctly as before. - { - ScopedFPDFBitmap bitmap = - RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmap(bitmap.get(), kAnnotationHighlightRolloverApPng); - } + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "annotation_highlight_rollover_ap"); } } @@ -3007,11 +3001,10 @@ TEST_F(FPDFAnnotEmbedderTest, FocusableAnnotRendering) { ScopedPage page = LoadScopedPage(0); ASSERT_TRUE(page); - { - // Check the initial rendering. - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), "annots_page1"); - } + // Check the initial rendering. + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "annots_page1"); // Make links and highlights focusable. static constexpr FPDF_ANNOTATION_SUBTYPE kSubTypes[] = {FPDF_ANNOT_LINK, @@ -3032,8 +3025,9 @@ TEST_F(FPDFAnnotEmbedderTest, FocusableAnnotRendering) { ASSERT_TRUE(annot); EXPECT_EQ(FPDF_ANNOT_LINK, FPDFAnnot_GetSubtype(annot.get())); EXPECT_TRUE(FORM_SetFocusedAnnot(form_handle(), annot.get())); - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), "annots_page1_focus_link"); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "annots_page1_focus_link"); } { @@ -3042,9 +3036,9 @@ TEST_F(FPDFAnnotEmbedderTest, FocusableAnnotRendering) { ASSERT_TRUE(annot); EXPECT_EQ(FPDF_ANNOT_HIGHLIGHT, FPDFAnnot_GetSubtype(annot.get())); EXPECT_TRUE(FORM_SetFocusedAnnot(form_handle(), annot.get())); - ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page.get(), FPDF_ANNOT); - CompareBitmapWithExpectationSuffix(bitmap.get(), - "annots_page1_focus_highlight"); + CompareDisplayList( + RenderLoadedPageWithFlagsToDisplayList(page.get(), FPDF_ANNOT), + "annots_page1_focus_highlight"); } } diff --git a/testing/resources/embedder_tests/annotation_highlight_rollover_ap.dump.txt b/testing/resources/embedder_tests/annotation_highlight_rollover_ap.dump.txt new file mode 100644 index 0000000000..0541a9b4eb --- /dev/null +++ b/testing/resources/embedder_tests/annotation_highlight_rollover_ap.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +RestoreState +SaveState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/annotation_highlight_rollover_ap.png b/testing/resources/embedder_tests/annotation_highlight_rollover_ap.png deleted file mode 100644 index 67b7d946f90ce5878d27ce773096d10062903d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 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/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 H=fVF0`$#CN diff --git a/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_linux.png b/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_linux.png deleted file mode 100644 index 8d587ab07c80d533ed59c9120e0d31048e89f599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17951 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 OONz2;GGC;gzx`kBw2e3b diff --git a/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_win.png b/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_win.png deleted file mode 100644 index d8fd1a803fe570f55df08993050e8063444cd8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6152 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 diff --git a/testing/resources/embedder_tests/annots_page1_focus_link.dump.txt b/testing/resources/embedder_tests/annots_page1_focus_link.dump.txt new file mode 100644 index 0000000000..e1507328f9 --- /dev/null +++ b/testing/resources/embedder_tests/annots_page1_focus_link.dump.txt @@ -0,0 +1,28 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +DrawDeviceText font="Tinos" size=18.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,92.0000] glyphs=[(idx=47,u=U+004C,origin=(0.0000,0.0000)) (idx=76,u=U+0069,origin=(10.9980,0.0000)) (idx=81,u=U+006E,origin=(16.0020,0.0000)) (idx=78,u=U+006B,origin=(25.0020,0.0000)) (idx=3,u=U+0020,origin=(34.0020,0.0000)) (idx=36,u=U+0041,origin=(38.5020,0.0000)) (idx=81,u=U+006E,origin=(51.4980,0.0000)) (idx=81,u=U+006E,origin=(60.4980,0.0000)) (idx=82,u=U+006F,origin=(69.4980,0.0000)) (idx=87,u=U+0074,origin=(78.4980,0.0000)) (idx=68,u=U+0061,origin=(83.5020,0.0000)) (idx=87,u=U+0074,origin=(91.4940,0.0000)) (idx=76,u=U+0069,origin=(96.4980,0.0000)) (idx=82,u=U+006F,origin=(101.5020,0.0000)) (idx=81,u=U+006E,origin=(110.5020,0.0000)) (idx=86,u=U+0073,origin=(119.5020,0.0000)) (idx=3,u=U+0020,origin=(126.5040,0.0000)) (idx=16,u=U+002D,origin=(131.0040,0.0000)) (idx=3,u=U+0020,origin=(136.9980,0.0000)) (idx=51,u=U+0050,origin=(141.4980,0.0000)) (idx=68,u=U+0061,origin=(151.5060,0.0000)) (idx=74,u=U+0067,origin=(159.4980,0.0000)) (idx=72,u=U+0065,origin=(168.4980,0.0000)) (idx=3,u=U+0020,origin=(176.4900,0.0000)) (idx=20,u=U+0031,origin=(180.9900,0.0000))] +DrawDeviceText font="Arimo" size=14.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,157.0000] glyphs=[(idx=20,u=U+0031,origin=(0.0000,0.0000)) (idx=17,u=U+002E,origin=(7.7840,0.0000)) (idx=3,u=U+0020,origin=(11.6760,0.0000)) (idx=47,u=U+004C,origin=(15.5680,0.0000)) (idx=76,u=U+0069,origin=(23.3520,0.0000)) (idx=81,u=U+006E,origin=(26.4600,0.0000)) (idx=78,u=U+006B,origin=(34.2440,0.0000)) (idx=3,u=U+0020,origin=(41.2440,0.0000)) (idx=90,u=U+0077,origin=(45.1360,0.0000)) (idx=76,u=U+0069,origin=(55.2440,0.0000)) (idx=87,u=U+0074,origin=(58.3520,0.0000)) (idx=75,u=U+0068,origin=(62.2440,0.0000)) (idx=3,u=U+0020,origin=(70.0280,0.0000)) (idx=71,u=U+0064,origin=(73.9200,0.0000)) (idx=72,u=U+0065,origin=(81.7040,0.0000)) (idx=86,u=U+0073,origin=(89.4880,0.0000)) (idx=87,u=U+0074,origin=(96.4880,0.0000)) (idx=76,u=U+0069,origin=(100.3800,0.0000)) (idx=81,u=U+006E,origin=(103.4880,0.0000)) (idx=68,u=U+0061,origin=(111.2720,0.0000)) (idx=87,u=U+0074,origin=(119.0560,0.0000)) (idx=76,u=U+0069,origin=(122.9480,0.0000)) (idx=82,u=U+006F,origin=(126.0560,0.0000)) (idx=81,u=U+006E,origin=(133.8400,0.0000)) (idx=3,u=U+0020,origin=(141.6240,0.0000)) (idx=87,u=U+0074,origin=(145.5160,0.0000)) (idx=82,u=U+006F,origin=(149.4080,0.0000)) (idx=3,u=U+0020,origin=(157.1920,0.0000)) (idx=73,u=U+0066,origin=(161.0840,0.0000)) (idx=76,u=U+0069,origin=(164.9760,0.0000)) (idx=85,u=U+0072,origin=(168.0840,0.0000)) (idx=86,u=U+0073,origin=(172.7460,0.0000)) (idx=87,u=U+0074,origin=(179.7460,0.0000)) (idx=3,u=U+0020,origin=(183.6380,0.0000)) (idx=83,u=U+0070,origin=(187.5300,0.0000)) (idx=68,u=U+0061,origin=(195.3140,0.0000)) (idx=74,u=U+0067,origin=(203.0980,0.0000)) (idx=72,u=U+0065,origin=(210.8820,0.0000))] +DrawDeviceText font="Arimo" size=14.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,80.0000,177.0000] glyphs=[(idx=21,u=U+0032,origin=(0.0000,0.0000)) (idx=17,u=U+002E,origin=(7.7840,0.0000)) (idx=3,u=U+0020,origin=(11.6760,0.0000)) (idx=47,u=U+004C,origin=(15.5680,0.0000)) (idx=76,u=U+0069,origin=(23.3520,0.0000)) (idx=81,u=U+006E,origin=(26.4600,0.0000)) (idx=78,u=U+006B,origin=(34.2440,0.0000)) (idx=3,u=U+0020,origin=(41.2440,0.0000)) (idx=90,u=U+0077,origin=(45.1360,0.0000)) (idx=76,u=U+0069,origin=(55.2440,0.0000)) (idx=87,u=U+0074,origin=(58.3520,0.0000)) (idx=75,u=U+0068,origin=(62.2440,0.0000)) (idx=3,u=U+0020,origin=(70.0280,0.0000)) (idx=71,u=U+0064,origin=(73.9200,0.0000)) (idx=72,u=U+0065,origin=(81.7040,0.0000)) (idx=86,u=U+0073,origin=(89.4880,0.0000)) (idx=87,u=U+0074,origin=(96.4880,0.0000)) (idx=76,u=U+0069,origin=(100.3800,0.0000)) (idx=81,u=U+006E,origin=(103.4880,0.0000)) (idx=68,u=U+0061,origin=(111.2720,0.0000)) (idx=87,u=U+0074,origin=(119.0560,0.0000)) (idx=76,u=U+0069,origin=(122.9480,0.0000)) (idx=82,u=U+006F,origin=(126.0560,0.0000)) (idx=81,u=U+006E,origin=(133.8400,0.0000)) (idx=3,u=U+0020,origin=(141.6240,0.0000)) (idx=87,u=U+0074,origin=(145.5160,0.0000)) (idx=82,u=U+006F,origin=(149.4080,0.0000)) (idx=3,u=U+0020,origin=(157.1920,0.0000)) (idx=86,u=U+0073,origin=(161.0840,0.0000)) (idx=72,u=U+0065,origin=(168.0840,0.0000)) (idx=70,u=U+0063,origin=(175.8680,0.0000)) (idx=82,u=U+006F,origin=(182.8680,0.0000)) (idx=81,u=U+006E,origin=(190.6520,0.0000)) (idx=71,u=U+0064,origin=(198.4360,0.0000)) (idx=3,u=U+0020,origin=(206.2200,0.0000)) (idx=83,u=U+0070,origin=(210.1120,0.0000)) (idx=68,u=U+0061,origin=(217.8960,0.0000)) (idx=74,u=U+0067,origin=(225.6799,0.0000)) (idx=72,u=U+0065,origin=(233.4639,0.0000))] +DrawDeviceText font="Arimo" size=10.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,68.0000,261.0000] glyphs=[(idx=51,u=U+0050,origin=(0.0000,0.0000)) (idx=39,u=U+0044,origin=(6.6700,0.0000)) (idx=41,u=U+0046,origin=(13.8900,0.0000)) (idx=3,u=U+0020,origin=(20.0000,0.0000)) (idx=53,u=U+0052,origin=(22.7800,0.0000)) (idx=72,u=U+0065,origin=(30.0000,0.0000)) (idx=73,u=U+0066,origin=(35.5600,0.0000)) (idx=72,u=U+0065,origin=(38.3400,0.0000)) (idx=85,u=U+0072,origin=(43.9000,0.0000)) (idx=72,u=U+0065,origin=(47.2300,0.0000)) (idx=81,u=U+006E,origin=(52.7900,0.0000)) (idx=70,u=U+0063,origin=(58.3500,0.0000)) (idx=72,u=U+0065,origin=(63.3500,0.0000)) (idx=15,u=U+002C,origin=(68.9100,0.0000)) (idx=3,u=U+0020,origin=(71.6900,0.0000)) (idx=57,u=U+0056,origin=(74.4700,0.0000)) (idx=72,u=U+0065,origin=(81.1400,0.0000)) (idx=85,u=U+0072,origin=(86.7000,0.0000)) (idx=86,u=U+0073,origin=(90.0300,0.0000)) (idx=76,u=U+0069,origin=(95.0300,0.0000)) (idx=82,u=U+006F,origin=(97.2500,0.0000)) (idx=81,u=U+006E,origin=(102.8100,0.0000)) (idx=3,u=U+0020,origin=(108.3700,0.0000)) (idx=20,u=U+0031,origin=(111.1500,0.0000)) (idx=17,u=U+002E,origin=(116.7100,0.0000)) (idx=26,u=U+0037,origin=(119.4900,0.0000)) (idx=15,u=U+002C,origin=(125.0500,0.0000)) (idx=3,u=U+0020,origin=(127.8300,0.0000)) (idx=54,u=U+0053,origin=(130.6100,0.0000)) (idx=72,u=U+0065,origin=(137.2800,0.0000)) (idx=70,u=U+0063,origin=(142.8400,0.0000)) (idx=87,u=U+0074,origin=(147.8400,0.0000)) (idx=76,u=U+0069,origin=(150.6200,0.0000)) (idx=82,u=U+006F,origin=(152.8400,0.0000)) (idx=81,u=U+006E,origin=(158.4000,0.0000)) (idx=3,u=U+0020,origin=(163.9600,0.0000)) (idx=27,u=U+0038,origin=(166.7400,0.0000)) (idx=17,u=U+002E,origin=(172.3000,0.0000)) (idx=23,u=U+0034,origin=(175.0800,0.0000)) (idx=17,u=U+002E,origin=(180.6400,0.0000)) (idx=24,u=U+0035,origin=(183.4200,0.0000)) (idx=3,u=U+0020,origin=(188.9800,0.0000)) (idx=71,u=U+0064,origin=(191.7600,0.0000)) (idx=72,u=U+0065,origin=(197.3200,0.0000)) (idx=73,u=U+0066,origin=(202.8800,0.0000)) (idx=76,u=U+0069,origin=(205.6600,0.0000)) (idx=81,u=U+006E,origin=(207.8800,0.0000)) (idx=72,u=U+0065,origin=(213.4400,0.0000)) (idx=86,u=U+0073,origin=(219.0000,0.0000)) (idx=3,u=U+0020,origin=(224.0000,0.0000)) (idx=36,u=U+0041,origin=(226.7800,0.0000)) (idx=81,u=U+006E,origin=(233.4500,0.0000)) (idx=81,u=U+006E,origin=(239.0099,0.0000)) (idx=82,u=U+006F,origin=(244.5699,0.0000)) (idx=87,u=U+0074,origin=(250.1299,0.0000)) (idx=68,u=U+0061,origin=(252.9099,0.0000)) (idx=87,u=U+0074,origin=(258.4699,0.0000)) (idx=76,u=U+0069,origin=(261.2499,0.0000)) (idx=82,u=U+006F,origin=(263.4699,0.0000)) (idx=81,u=U+006E,origin=(269.0299,0.0000)) (idx=86,u=U+0073,origin=(274.5899,0.0000))] +DrawDeviceText font="Arimo" size=10.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,314.0000] glyphs=[(idx=22,u=U+0033,origin=(0.0000,0.0000)) (idx=17,u=U+002E,origin=(5.5600,0.0000)) (idx=3,u=U+0020,origin=(8.3400,0.0000)) (idx=3,u=U+0020,origin=(11.1200,0.0000)) (idx=36,u=U+0041,origin=(13.9000,0.0000)) (idx=81,u=U+006E,origin=(20.5700,0.0000)) (idx=3,u=U+0020,origin=(26.1300,0.0000)) (idx=72,u=U+0065,origin=(28.9100,0.0000)) (idx=91,u=U+0078,origin=(34.4700,0.0000)) (idx=68,u=U+0061,origin=(39.4700,0.0000)) (idx=80,u=U+006D,origin=(45.0300,0.0000)) (idx=83,u=U+0070,origin=(53.3600,0.0000)) (idx=79,u=U+006C,origin=(58.9200,0.0000)) (idx=72,u=U+0065,origin=(61.1400,0.0000)) (idx=3,u=U+0020,origin=(66.7000,0.0000)) (idx=82,u=U+006F,origin=(69.4800,0.0000)) (idx=73,u=U+0066,origin=(75.0400,0.0000)) (idx=3,u=U+0020,origin=(77.8200,0.0000)) (idx=43,u=U+0048,origin=(80.6000,0.0000)) (idx=76,u=U+0069,origin=(87.8200,0.0000)) (idx=74,u=U+0067,origin=(90.0400,0.0000)) (idx=75,u=U+0068,origin=(95.6000,0.0000)) (idx=79,u=U+006C,origin=(101.1600,0.0000)) (idx=76,u=U+0069,origin=(103.3800,0.0000)) (idx=74,u=U+0067,origin=(105.6000,0.0000)) (idx=75,u=U+0068,origin=(111.1600,0.0000)) (idx=87,u=U+0074,origin=(116.7200,0.0000)) (idx=3,u=U+0020,origin=(119.5000,0.0000)) (idx=90,u=U+0077,origin=(122.2800,0.0000)) (idx=76,u=U+0069,origin=(129.5000,0.0000)) (idx=87,u=U+0074,origin=(131.7200,0.0000)) (idx=75,u=U+0068,origin=(134.5000,0.0000)) (idx=3,u=U+0020,origin=(140.0600,0.0000)) (idx=87,u=U+0074,origin=(142.8400,0.0000)) (idx=72,u=U+0065,origin=(145.6200,0.0000)) (idx=91,u=U+0078,origin=(151.1800,0.0000)) (idx=87,u=U+0074,origin=(156.1800,0.0000)) (idx=3,u=U+0020,origin=(158.9600,0.0000)) (idx=81,u=U+006E,origin=(161.7400,0.0000)) (idx=82,u=U+006F,origin=(167.3000,0.0000)) (idx=87,u=U+0074,origin=(172.8600,0.0000)) (idx=72,u=U+0065,origin=(175.6400,0.0000)) (idx=86,u=U+0073,origin=(181.2000,0.0000))] +DrawDeviceText font="Arimo" size=10.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,332.0000] glyphs=[(idx=75,u=U+0068,origin=(0.0000,0.0000)) (idx=87,u=U+0074,origin=(5.5600,0.0000)) (idx=87,u=U+0074,origin=(8.3400,0.0000)) (idx=83,u=U+0070,origin=(11.1200,0.0000)) (idx=86,u=U+0073,origin=(16.6800,0.0000)) (idx=29,u=U+003A,origin=(21.6800,0.0000)) (idx=18,u=U+002F,origin=(24.4600,0.0000)) (idx=18,u=U+002F,origin=(27.2400,0.0000)) (idx=83,u=U+0070,origin=(30.0200,0.0000)) (idx=71,u=U+0064,origin=(35.5800,0.0000)) (idx=73,u=U+0066,origin=(41.1400,0.0000)) (idx=76,u=U+0069,origin=(43.9200,0.0000)) (idx=88,u=U+0075,origin=(46.1400,0.0000)) (idx=80,u=U+006D,origin=(51.7000,0.0000)) (idx=17,u=U+002E,origin=(60.0300,0.0000)) (idx=74,u=U+0067,origin=(62.8100,0.0000)) (idx=82,u=U+006F,origin=(68.3700,0.0000)) (idx=82,u=U+006F,origin=(73.9300,0.0000)) (idx=74,u=U+0067,origin=(79.4900,0.0000)) (idx=79,u=U+006C,origin=(85.0500,0.0000)) (idx=72,u=U+0065,origin=(87.2700,0.0000)) (idx=86,u=U+0073,origin=(92.8300,0.0000)) (idx=82,u=U+006F,origin=(97.8300,0.0000)) (idx=88,u=U+0075,origin=(103.3900,0.0000)) (idx=85,u=U+0072,origin=(108.9500,0.0000)) (idx=70,u=U+0063,origin=(112.2800,0.0000)) (idx=72,u=U+0065,origin=(117.2800,0.0000)) (idx=17,u=U+002E,origin=(122.8400,0.0000)) (idx=70,u=U+0063,origin=(125.6200,0.0000)) (idx=82,u=U+006F,origin=(130.6200,0.0000)) (idx=80,u=U+006D,origin=(136.1800,0.0000)) (idx=18,u=U+002F,origin=(144.5100,0.0000)) (idx=83,u=U+0070,origin=(147.2900,0.0000)) (idx=71,u=U+0064,origin=(152.8500,0.0000)) (idx=73,u=U+0066,origin=(158.4100,0.0000)) (idx=76,u=U+0069,origin=(161.1900,0.0000)) (idx=88,u=U+0075,origin=(163.4100,0.0000)) (idx=80,u=U+006D,origin=(168.9700,0.0000)) (idx=3,u=U+0020,origin=(177.3000,0.0000)) (idx=76,u=U+0069,origin=(180.0800,0.0000)) (idx=86,u=U+0073,origin=(182.3000,0.0000)) (idx=3,u=U+0020,origin=(187.3000,0.0000)) (idx=79,u=U+006C,origin=(190.0800,0.0000)) (idx=76,u=U+0069,origin=(192.3000,0.0000)) (idx=81,u=U+006E,origin=(194.5200,0.0000)) (idx=78,u=U+006B,origin=(200.0800,0.0000)) (idx=3,u=U+0020,origin=(205.0800,0.0000)) (idx=76,u=U+0069,origin=(207.8600,0.0000)) (idx=81,u=U+006E,origin=(210.0800,0.0000)) (idx=3,u=U+0020,origin=(215.6400,0.0000)) (idx=83,u=U+0070,origin=(218.4200,0.0000)) (idx=79,u=U+006C,origin=(223.9800,0.0000)) (idx=68,u=U+0061,origin=(226.2000,0.0000)) (idx=76,u=U+0069,origin=(231.7600,0.0000)) (idx=81,u=U+006E,origin=(233.9800,0.0000)) (idx=3,u=U+0020,origin=(239.5400,0.0000)) (idx=87,u=U+0074,origin=(242.3200,0.0000)) (idx=72,u=U+0065,origin=(245.1000,0.0000)) (idx=91,u=U+0078,origin=(250.6600,0.0000)) (idx=87,u=U+0074,origin=(255.6600,0.0000)) (idx=15,u=U+002C,origin=(258.4400,0.0000)) (idx=3,u=U+0020,origin=(261.2200,0.0000)) (idx=81,u=U+006E,origin=(264.0000,0.0000)) (idx=82,u=U+006F,origin=(269.5600,0.0000)) (idx=87,u=U+0074,origin=(275.1200,0.0000)) (idx=3,u=U+0020,origin=(277.9000,0.0000)) (idx=79,u=U+006C,origin=(280.6800,0.0000)) (idx=76,u=U+0069,origin=(282.9000,0.0000)) (idx=81,u=U+006E,origin=(285.1200,0.0000)) (idx=78,u=U+006B,origin=(290.6800,0.0000)) (idx=3,u=U+0020,origin=(295.6800,0.0000)) (idx=68,u=U+0061,origin=(298.4600,0.0000)) (idx=81,u=U+006E,origin=(304.0200,0.0000)) (idx=81,u=U+006E,origin=(309.5800,0.0000)) (idx=82,u=U+006F,origin=(315.1400,0.0000)) (idx=87,u=U+0074,origin=(320.7000,0.0000)) (idx=68,u=U+0061,origin=(323.4799,0.0000)) (idx=87,u=U+0074,origin=(329.0399,0.0000)) (idx=76,u=U+0069,origin=(331.8199,0.0000)) (idx=82,u=U+006F,origin=(334.0399,0.0000)) (idx=81,u=U+006E,origin=(339.5999,0.0000)) (idx=17,u=U+002E,origin=(345.1599,0.0000)) (idx=3,u=U+0020,origin=(347.9399,0.0000)) (idx=55,u=U+0054,origin=(350.7199,0.0000)) (idx=75,u=U+0068,origin=(356.8299,0.0000)) (idx=72,u=U+0065,origin=(362.3899,0.0000)) (idx=86,u=U+0073,origin=(367.9499,0.0000)) (idx=72,u=U+0065,origin=(372.9499,0.0000)) (idx=3,u=U+0020,origin=(378.5099,0.0000)) (idx=68,u=U+0061,origin=(381.2899,0.0000)) (idx=85,u=U+0072,origin=(386.8499,0.0000)) (idx=72,u=U+0065,origin=(390.1799,0.0000)) (idx=3,u=U+0020,origin=(395.7399,0.0000)) (idx=85,u=U+0072,origin=(398.5199,0.0000)) (idx=72,u=U+0065,origin=(401.8499,0.0000)) (idx=73,u=U+0066,origin=(407.4099,0.0000)) (idx=72,u=U+0065,origin=(410.1899,0.0000)) (idx=85,u=U+0072,origin=(415.7499,0.0000)) (idx=85,u=U+0072,origin=(419.0799,0.0000)) (idx=72,u=U+0065,origin=(422.4099,0.0000)) (idx=71,u=U+0064,origin=(427.9698,0.0000)) (idx=3,u=U+0020,origin=(433.5298,0.0000)) (idx=87,u=U+0074,origin=(436.3098,0.0000)) (idx=82,u=U+006F,origin=(439.0898,0.0000))] +DrawDeviceText font="Arimo" size=10.0000 color=0xff000000 matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,349.0000] glyphs=[(idx=68,u=U+0061,origin=(0.0000,0.0000)) (idx=86,u=U+0073,origin=(5.5600,0.0000)) (idx=3,u=U+0020,origin=(10.5600,0.0000)) (idx=58,u=U+0057,origin=(13.3400,0.0000)) (idx=72,u=U+0065,origin=(22.7800,0.0000)) (idx=69,u=U+0062,origin=(28.3400,0.0000)) (idx=47,u=U+004C,origin=(33.9000,0.0000)) (idx=76,u=U+0069,origin=(39.4600,0.0000)) (idx=81,u=U+006E,origin=(41.6800,0.0000)) (idx=78,u=U+006B,origin=(47.2400,0.0000)) (idx=86,u=U+0073,origin=(52.2400,0.0000)) (idx=3,u=U+0020,origin=(57.2400,0.0000)) (idx=76,u=U+0069,origin=(60.0200,0.0000)) (idx=81,u=U+006E,origin=(62.2400,0.0000)) (idx=3,u=U+0020,origin=(67.8000,0.0000)) (idx=51,u=U+0050,origin=(70.5800,0.0000)) (idx=39,u=U+0044,origin=(77.2500,0.0000)) (idx=41,u=U+0046,origin=(84.4700,0.0000)) (idx=76,u=U+0069,origin=(90.5800,0.0000)) (idx=88,u=U+0075,origin=(92.8000,0.0000)) (idx=80,u=U+006D,origin=(98.3600,0.0000)) (idx=17,u=U+002E,origin=(106.6900,0.0000))] +RestoreState +SaveState +RestoreState +SaveState +RestoreState +SaveState +RestoreState +RestoreState +SaveState +FillRect [156,413,169,441] color=0xffdcdcdc +DrawPath fill=0xffffffff stroke=0x00000000 rule=winding stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,442.0000] points=[move(87.0000,2.0000) line(87.0000,28.0000) line(98.0000,28.0000) line(97.0000,27.0000) line(88.0000,27.0000) line(88.0000,3.0000)] +DrawPath fill=0xff808080 stroke=0x00000000 rule=winding stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,442.0000] points=[move(98.0000,28.0000) line(98.0000,2.0000) line(87.0000,2.0000) line(88.0000,3.0000) line(97.0000,3.0000) line(97.0000,27.0000)] +DrawPath fill=0xff000000 stroke=0x00000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,442.0000] points=[move(86.0000,1.0000) line(99.0000,1.0000) line(99.0000,29.0000) line(86.0000,29.0000) line(86.0000,1.0000,close) move(87.0000,2.0000) line(98.0000,2.0000) line(98.0000,28.0000) line(87.0000,28.0000) line(87.0000,2.0000,close)] +DrawPath fill=0xff000000 stroke=0x00000000 rule=winding stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,70.0000,442.0000] points=[move(89.5000,16.5000) line(95.5000,16.5000) line(92.5000,13.5000) line(89.5000,16.5000)] +RestoreState +FillRect [70,442,170,412] color=0x64dde4ff +DrawPath fill=0x00000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,792.0000] points=[move(69.0000,653.0000) line(69.0000,633.0000) line(542.0000,633.0000) line(542.0000,653.0000) line(69.0000,653.0000)] diff --git a/testing/resources/embedder_tests/annots_page1_focus_link_agg.png b/testing/resources/embedder_tests/annots_page1_focus_link_agg.png deleted file mode 100644 index a8e708cb4c41356462cce4ebd63ade9052c756a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22042 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 RelZgi_@1tQF6*2UngCyRZ8HD> diff --git a/testing/resources/embedder_tests/annots_page1_focus_link_agg_mac.png b/testing/resources/embedder_tests/annots_page1_focus_link_agg_mac.png deleted file mode 100644 index 4009ddc6701322a50be31ae04aa9601c9229a7c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21368 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 diff --git a/testing/resources/embedder_tests/annots_page1_focus_link_skia_mac.png b/testing/resources/embedder_tests/annots_page1_focus_link_skia_mac.png deleted file mode 100644 index d8de4a350ceddf7c02b6d38483f9b2d227993cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19767 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 diff --git a/testing/resources/embedder_tests/annots_page1_focus_link_skia_win.png b/testing/resources/embedder_tests/annots_page1_focus_link_skia_win.png deleted file mode 100644 index c93d2f0bdd89f10700701bd3b538675925ed3f5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6175 zcmd5=c~nzbnomoWRJlM^Dd55miU@=fMPyfzC8Pig*Mk^M;~%dj1C=XGIHwDqbiE1p=W^pllE* zI~!C90##OmIzgb$P7nhGVlY4x6CfT4#N&bFAdp;s{P=MzD=QZl7sWa#6zUHHkVvFr zH4247qtO`|88>d+P>{*a&VKOVK?%NEL9DW}l2A>oudjdl^l4jL8>Ne?pxxQo`Ro~} zpUR+8sY4@71rCG3P(V#gOt3gS4u_)v*0+$y~xC1;M#V76f3i!f8zu;TySHL-4gMx1}b56VH8f@FY)qY{IZU5H5|L=rP z2Mr<~;T%be%apoqsmpMi_>qb1VJda*O`93SAJ)XN|20OAVZ92n#~L>^BD*;m&!Ra_ z9p2JCQm;j2RN$CkjU^51@yQfG^eM6w4*4ywE1d%k)1iF023V!YZe;ByHhsgCUQ17w z*xFK(nGUgURCOuRf{R}=Co}7BmB70{&ABhgPERx^FgxV1KhMM*U}tKAibMA~H>SGQBwkj9k*3mS=d#^MGK;JJlI{fRgt!U*E-g;}=HpTRGTR~jWiDb& zOEGeK#aGYv)XnTVyySj*hXylgF;07ueQu;lwV;6$)RwgRF{Hk@vhOOaJ78ron~bt#q{V_g~5XcCxd@Tt!`Ik zvR}x{${4xy*f%RLGT3jIbG4c>l$f3QrFEWX&x?IQs-^MKOWWy`S5 zQD?eCiQz&>D+d8de%OD1(%td7fR+Q~cTN(DK3=rye5)%BlB|a3Ow=b!hSOjlbzbX3l@p2kM>wsxbe93Dr0Lv1BQrKvw7&G*{vJZ-NT>TGqNm zZF8OLcq;G}=l!+yyT34kvoSgQXm>CXTiBhhhhbH9oJ_5?>>*DTQMO z6J;tf@ywn{%!ZPXdaiV1BNw* zr3VdQ{%u#%>S$5vInKjuVRPM-ySD9c4&ZggkUq<)X=Lcf*WHHJQwMD_n}~>4Ny!nh zo_w}qkGapn&-ht-f=Uvql@CqV2*BplDZ6_qS*Bvtc#Ff0km_CMye=EU3mTNqaW6hG z;-=^jPi%hs>QtaFM0S!`6>|fRIW&zBst|ec-%mNsgKOAli*abM>Yv>ui-j1$LJmNP zD6g8l!<%`>IY4{+tKF~P!2D$zE*4@|iWSyOS|6rOdysGc3{wwgfLDviQ0-uk7k?s# zxQ~qqH2qrnNeinOOSsa4jS-#g>c_A!ifF^k{e?0Wdj!t~=nks$z?|4jh{*-Q97sb9 zfsKwp1!LB%R}EOHsU}aklFDa%A<6i|d6EHAV*4&gamo?%P#jH}N*>ds?|=8kttuw| zz<~HW*p4RYj3eb8B5%MFYtJ0C4=vC%(c!qQRB8}$8MdAECi3GlFZHzyvh!xec4i@x zirf@_h%GFF{pz@BM{I`v&OK1?lz&I;ZB5UQZk6{+Utd9fs>2YjaMP5TN=S-%%ajh_ zr43^|svl@m{00r+BlG*8z=h)1Lh$gacVf0f@$SOC$1QvzQ3B&!t#=P_QNMgJcOtFM zIFiRVJxJpT5r6#@;4>}Q%fF2g*vR({N)SG_S#{*nx0hNEpu+&f9Q&?(HbBVPUN%=O z;R)tEi+5jO$`C(Jm-!Ugp-N^ivCPny0pYLvKCbymZ6Qy=Zz`hq9@FOEs~7E31%{om zAKSxTbb9UqGQK1xthqd&g$o_Ehb^Mg*4+HY2i(*pZvANjbEkv|@Wy*TDeeS2^datp zRVxc$Uw_brNPmN`A4Cl*$5|Yg$RpU#la}gatDb(Uqu}7^Uc>vcW;)8q*ottonZE5& z4^QyXBsEWDeG_=DN*ui#*}3rS@^?T*oS}*4;WG*!``OoS`Pk1UpO>X-?|WBqDT$#`RDiUzZk&e^{FMvdxVLX3nr_Mr~o{4|r(X`k;$_3 zJnLwa;RI{`Do!TkAs9buKtt?mXC}pFsew8hS^zFOy(?=%pFgbZLNvc&x_U7ZmvYC{ zGPK68M%_5DIR*3lTkm)`T8P!J_pfjr8t>vuD*dvZ1|{msvm>9Jhf*r9;g*_x3MrNI zdxO6)8Mln2xQ3C+=3h2Jtoun2jdGF+;6Ob4UCR)wJ)0=S>jH;KSNM=h~g=D{0C0{jJOD zeT1p5;^GN2l-5jw0j?zyH~r0hd>uTY7CcUJ>djcm8Olp;F*`;QGGB%h3qx?;wX7}{ z%Dipbe_A-Vyi(2Q(}gRsb*j@9=~KuN*Fk?Bht323xnd-$P3QEA^*qp*pqU2{ovBUbd1nTSNblC zo>|K-DZKxn+CA8?IU>hDWvJj{i7T;-_TviMOrXwpOHhWvjF7wpEu|-MU6xogYDsDd zR~k;@3o%1%y@OsJ&F~}&IQ~v)u#bhU2x^c?s=H=7XTz zn8uF&2MY~x#HT_Pm=*<7(zbOL1>vStY9m2$rQSX6(M$8Wo2zv(<7=WraYWa32iWHG z=|zYA(f!~3K`KU6CM93%{8?9NKiUR>C@XB>xDGiacbekPj_j7DH#2|Qh-hYNcD;@~ zX`Xk|b@pxc6I&|Q-r*U(+YcbLS9j4niX5}+L&XJVX4I2XYPqB1K3X^eqm@30?ndX| zpOoFz2Crh4uYLUVC&`GnkT~946xi%jIThy}o4b5dRA*?Ul?S}CaxHxlP0-kaC>2*m zm-npAySbWIau2%3fx(vXH6yF92~+*{9fb2lEj{0?B8rb$4ct5Pmpx~zWcJQ+VSMGG zd@ph|M!JR^Zlsx!$#Hd0)BoB$uOGnTg$5I?HF2tVIOj_wolU6gY{- zvvj{+vzf=Cl(D(lg@J%mjjV&TZge+OGb#@`L`7;w_51I%;QIA4m0&>y!wQl!>cF^} zLh_4whQ=Lv`TEsH$BiVY#-QE=9v_N~q&T;f3tF5GHyJRKzE3q^{v4@ILn^dLN_{+e zqzyCd_?qqJ7o7_vz(+LR)9?uO0lO#K6^DX~aWfEiGiEq!hpaOX@Gf_}hC~n1u+e&@ zT)>2Q%*b{svO9S(kP{^+nHet&Y-I=g)?mZGwz3X8GhguBmjJytf*0^JD(bn)on9-l zP1s!fhA@t8q{OT~N5U-0*nJ9aBpp}(oNN7F2A7fxSTHtOJxc6&7RUSR=v)wcLFryR z+IgqH3@;XS3q(Jy=d04=Uy3r0EV}wfos+!=>wKUlHen5&Hx~PfeOIFk%fZC=iGGi4 zC<6|}CF6Gve`YC#EvA}(5aop@e{iy1gNR{~w&?<`98UT!x=Kn~AiLu9%2Qj9#Ppwy zGJm*tROVE3doLJkH?dSiM&6HbbHtSkXM#-&grw4>Vq!=gBEpswBEpAx zdW4&5tzGW1quz$OmfDaoL5I5|Hy(a}QTkP@DKt1@$!=mX?@&QP%i;t3CUL`M$kRmh z5o_ppjkUaU7F4@g<_G)W!Ovs7qE2*X`D#r7KUV1po^pKHr%c5re&TM}`&(|tf z2O2da-}nAGCeh1n@Xfk)O~~feVV;LOsfe+$r_!9LGIv1_nh-1UY@`*(>C|~b{aFfqf>+uXh=2IM0d0;|cY`dnv3p`^ugbA$$ z$0KI1+Fsl_u%TJWLTLb~W5pZA;j8PL+(*WPqOT!Q^|JVu7{uO5LGtul(#98y&R6Fu zK3wb2HAxV84oV8}1HSUI`QEvE^(o28-a)tq7eq9r@uA0{C(HAA(Y~xEnOZBIICVzX zI<=nSfz|~31CooRW7uJ6urg8P&F{QtH??-RA4727Z3M}h95qRYuc#;tzFm<$a13Ry z;zfUZsd^oZ8z<|9>1Ky>*F3D z+tunjrqi(pz0yV-=|PXXFs2<5I!uMeXiF7dK;#pV({oR15{|<}x=b_=kf&vsNM?dF z$uyVcX+D!s6g$;} z^zi=Zm8C;$A!`yp_(@gZuNZ8ZU7MgFQ+0hbr=)+5*1b4Z*jM5{?-` zt(}+2FHXg;CaYLG-co{%uX!|duI?E#x+!2MZr@1dMpE|tGR=+75C!r+2t<3z?Ch7W zw|}rT&ewc+eeLwUrKSVxuc&ttH@^PQI!Xm;LDHYCh_k+>zK=MakaE(adbDbR*&J3< zweS{L9i0sm*LF0A@^RJJyy}I3SIsdH?trcmlQrU1z3>hw@f;EBmWs}hCKuLE*r%S< z@?u>77-?f4YN*6)JX~XwFW+|}jC{(z>p@;MDPGAh^%3&Atp@QKon*JdL=Fb=s|}g?DLL zkv5K9r>t$uwl;D_m(h1U_LzY!nxtP?nf>L%s-1`*26Uy<`g|-=8eo0A%-*)6{S-Rk zq!!es`_#j#&`=X%^TNi`S(}Qg;|poJw&hm=2|lu5vabJt^H zJFQG8me?{6ZncIHW3g{NP5&?Xkwee(s>5v3NlpnT%YNPkcyOM$1)B+U2!{=T8w#luK+(pr)_Zuy4!Z*Xi9sUv=^>|)0Gaz5#@dOUBC~&N!(T}zjeT^ zxc=|oOo0_f#_efR3~fa3cps)eo6)}QU%LqSdk*~{DwX{gPX9gO`dr-nCv$x(gZ_gB n>wgRJFOqovk;yN5WYZBLy0dQqz*o>EcKoI88~9+?@l8Kt9o$n&SSTM`Jsa`r`G>8Enf+vIT5l9;9Mu;aES1>#>~nXY~nS zWLGRPC+x)y&;7vtu_BN}zpASyif0-bc}!>4P4%lGs2N)7*fH^<_I4d9FL#s_eJ-9{vvBZTKr zKR@D5M4@^MI*VGO`Pw5n)Uf&$U&C093XuG#vG>ET%IvO1x*|@0d7P_GEHd()?JXQF zEO(l0J9Y-q@kUK%_pxY#I6BXpxIWug(-{vlz%!gPqVx5=vm%^X;?|(Jp;Er@+4eHtc2@AXS#yF*q{Qd zcNE;_l$6UOEgLnOaF^Z5YTlJ zVN~zhbT_Mv&rf~4^K_Sh+4skVx|;Okvqg0a+X#Q;fy_@LQ$Cc`ue_U5UX#F$CCf|yh5UFp5eKj-*O<_62vqS0raxhLOsN^iBt z@UtmK-N?E+T%wuxxH&X4Y<&Aio>rkQu~4t?=RFz;PYY=mgzVkBdD=yn1kGD{^vX6r z@->CB96NmYoTyzwg<^ASIGcaP&V2cZ^^-g&W`kbYSh$S6-EAf%s)m)^Mgfg1WfDH` z{(CM>eH>h2+9F%g`CiLMq$1{5Ts#V4m(Y!l@JT1MyKg!6ICBIH!+l$gUNDzndAE?snW4rHe?A#dV(=!lFK2u(#Z`;L@5wb}z24F&++mrXnlgS&{U+`LSqW0K%Z4p=?Yol=qj5KD^ zG#`4v1rF7VbSut9b>xW)i#7b7B%2oFiPqR!1q|=#P_&vf`Cc^r#amCzx0mYa*YmAh znj_e0XlU}qO0By6D7WAD5n>QFAl%~^e$#~kJa@I3VU>$YeO#66;(&(TaP@f^pPjk> z5*cFzvGA%~(5=4rqV~g3yPvCGuFnv;AErF-r=8TSHJvskOP49OCCkVde|ZgsW|`&^ zh4Qz&FV#I7ZRF#gf%J1VI>9P^kxl+M-3@{bU+rd^$R~X*1iE^N{rj>Dc zYBkcZ&c|R}gXFwf>%Hv~gL+Ia?lLze)!RdurysqMg3_e+Y z`0oiqJTxAZ@4`pVjRhgAt{c~|b%8@wuJ-v_g+et@n@Z8V_-x;GqBir!)P$~Eyojxc z?ZDGLwP2Vi*3JGWSkz6|^6k)L-@=!$0(ZJhlrRYLmt%Z4u2@${eN`t%)xa`NwnWjJ6Uz+oR=Fm)NhH`AN@BZFdUj4)NWD;EIgx308 zzs9zTwpBB;&Om+Dw+jMK?+;hI<8K$@^vdn9`y9g6+i6v~f>*ZFJ75<~-?R7{e11Z! zGG#kw*$lqK|F|imOpHL+&GZ%7@0H!B4_S3GqjK|;$846XZxU_ZxR~4sd39PYF;~CB z@l7HPpovR09_w8x9b#rs{LE}g(%x}@f4ESu9Q!EUZ+A9RDVhuBTa}9~={Ud%Nr#1> z6|jbsMz|wv^YCHE(rCT!_PprdzWd*SQ7E|NzZavJH1ksZM`YEKZNI;_+h1bAr&Ij& zwG#jbLDhs?!`-XnEgPK*tmKczuLU>HOc36l;Su-RT>8fM^mjubpaahcmh}Nt5zMUF z2N;LZF9%zSDHuXqx)#Q!T9Tyu*4p$w22XPtvrkJIe|N2W3&_`SUeyCqez_XiwaZ^G z_?jVnch~#wzBwv2YF=*B@A&!ULABW{o;@mghBY34zJ}NjSCezNzsKK1EsCXOW5jpAJv8$wjK3bnBohQHI#TgHm$2K?F9m~^@s{ZH zdx3W;=wL+37%_jw1qL>hKD6sl7>G}vJb@vtF9B{U{@;e zhc&dVqq{IX)MJi1m(8hLOqztrZc)~axKoa6cOZ5!n7K0Ly0?&mb6PNCEQwu zPT$k$M|Z)x$XdZl8s0+V~Fajxd(VpWBL$KjpbU9^#W z@VQhK;cnlZ<)-iNxluk+E*{dBk+&M4f$9Wio=6n84r7%ue57AuuF{k9=)Jh79{{qM zfc`v9ZVOH`C@%4&xR$&)YjO9Lrv@iZoajBN-&`8KpS-`*Bvz~(c|8PE)M!1HK~wX6 zRKH*#WyNZ$V6+o%i*QL`ru9h}8il`Si23mOv@xwST$*_qjF!I}-=01F1;e9f{rg)u z+q`iCOUu$i7NdHhE*?;s)e-be52t!YKt*btwLHcJ>s$}O&FaNud$P84NEiQIxbBjUU~y@m&+Zo5 zphL0Tb});s13wU(S4_${8YgI>I{$#Ey6P5&z!UgQza~g~SH8^K#ug?@dAhi57;M~C zVG*)?hbeKH*KH(9{x$F%U|HSDckZ}RczqA8sj*kG#{q|?BE?6pC`a=S_2g<0jx%dk zZ~lJE^)5eZf<=bKH;hFhE4{)GYM9XVL#}%pYBJ*i)8vW)&TEw*N*GV}*?OShB6zEW z^HSSO(hRZXVlHK*bY&_HmgHtJKb(2Vm>HstO?Y#d4`V#6l3n36dHw#o%hgC;y)tE2 zof>{Yn}N~?-9(;3DZpg|SIjFJP2yM#5pU1(4QH#dZgYhY#nCgTj1h!S%Po9$LV{iZ zQ<+U>cmei)uYDhel-~I1L@M%7o_~Sg@b3GdZgH9`bJLjyV&m)X#ciIvq zyc+~st8!_95@`M5c=M2;!B+ovJc?68=xS+n%AJg?#r_fnob!Tl$d?*_{Wg`ZO=TMW z?YuKQx|WCJ1t^T7Y_c<{Pb%mvpCODWg7n787G`1VTYZ+K2QeE4^eAG@95qWjesKh*^uC9)JV|Lj@ z%y-X==kukawW-efi@CxL1&?zhHbj0_qFXLaTl36xur;m#2w?tZJsMP_wbgjmXfq(Q z>-R++yB{C!bff3fzp76%0c*cMf{dojyhiPrPMy z+45z!)_YD3`Fe@I6=56eA0I}c;Mka2N-WyBFtUEfJ5Txo+JKHOqF_z;%lWDH>C%K` z-#x%V-_sSsYMmxk^B(8QhcIWx3VZ+fV0<0J95(aPBqeGqbR6JpDIK)h?p9PEmhR|L zb#!a;B&+K{Uy%{3u=V5l2lMQN68jP9zI~^(#1y=8qPQkXC|PGF<68AL z*38-u28WR#_qzuX*ZApQh+KvbGY~S6@$TI_yP-;Au7*ElFYZ?e9dM|*khNr48Tt%9 z=xS&tY62jIlsbaYDFSm&+@tbL5_?odwcD}@k3OAKqq^*w5EY<}dxQ3Ma_3sMQ+>rV z%w}q1o;+=h=~OoQ=#WZl!TfV-X$Wf|QNjV+-nwXpdc`MzEqHwSPZQqu2;;Sm(C^`FO;Gp?{d(2wgM4QT#c!vP$0QM!mRHTP5g84yE zX4~B#{-D+D?c#!W>d4tIiv04tx7MJfcYtFH{{*JTx6J?o4sPcaaL`i-BWe;?wPuU z^FRB2Z#zGgwLN{0K43Uu|J<)-t#yxbGlWD2Yb~>*cnA_d}Use1N9RU50Zkiiyu&6cyNKBMO*3LCPc#yOs+9# z%lnb0WceEsn8mvNy<`?8xrOGI40g#zr1X20s~C7!Q;&@y*SDuQSI*%|^?m@vgeyQV z{1o%q*?jTh#ry!?iQoW#t7j_W?S=-t!rydOyRV*L5szu1p*{WqK|#+Ovin1ic%JTV ztxrtY*Q{g6SEK$vgAPHXs*fNlq@<)gfBqbHKZaX-;n(L^0O)ab-ewyML!`kEqeCjT zEV}xIkkKT+&MN%XlDGaB^bwUE0!ihu% zx5d{mB{LsHUN>)z0kNZ`?n#3edjOEtZ2x+%{G8TA2~pTTdwY8W+Q92?GEKI|ru*N{ z?_hK;HmS`JtX8Rk-UKKRKX&awMD@n7r!Jlw18Pi4auZZ2l!85QaZH{Mpt(Z~+FfT2LGd0rl&2gk zko5+XHuI1BFm6G((@J#sPw|OZ3ARf%O9(Ck1)y8;ZQBv7Q5{g7Ep0=0Ih2^kTF#|Y ztHQ=Xm|m>y!xQVu51UDgBSm8hZ_lWV_SilCb^04Tck@RN>^jcj%G8B9kchB@l_pj$ zUsl^?eCK}f50yc81kBK@ad)|U!fJFv@BaHPfWfG})7)B9%erMYu?v3yTCUxWFNwsN zHsv*45V7f4f+-w;OHj8oXejr==*Ad3oXO&pC(9r}26`;Bq(?_#= zFR?40nr9F+pc5pV;KKlz6rC0jLeBN%Mmm|#pVxc}A`RTZ5)NLYT75FE4;#s-sU@NK z%6@zHqivk!UAyDw1@6hJF}2(j)f_ZGWH`yM>llOU`P8#h2_0kCV`c0?p9fmO&|{ii zFtiAXOOrA{iQ;;-kkFO3tal;*7wd1-AHK&3>#NN$$mlHnP==eQ~llkO;QpY#tZsCcyt=h5@ zq7P{9(K*cL>y}!M?rKH>R!or1??#pZb!Yx$HIF$vFEt-aOUL}tZXs^7-y)e^HDS|d zbHt?Z$^`7bx#>8uR^-ADT)q1UL9g2*YIU-m_1w7}3@YuCor(?f_u7g}2bh$GT>A`` zhP5emfU_oYnazO$8`#>a#`rhL^!ywH1H*(w4YTXa{p>%*Vr?@473KtH&>2^C2L3cU z?(L9uUrH6vb*B3VX8Of|rnfTe2Z}*In?a#m({F{KaXhL|=pFIPY0tv7w|uorCzZ^I zV#Pl{7{AJz9Z(3#L^*4w-aTlWf$~ZGE9Mx5NeE~HmC>Gg{mDyxmieA|(@#ItW$c~2 zOD9-yh=(bksupWe*I_>hSC<>lhiB?yjntB*K}xVD6ey@{?*qQ{_!5J3fer^uu#F== z&C!F5ttc!N2%lE=k1bAnnNcnm4q0CK5OK|Z7{84 zw;a*0&jKNK}BRZO*3`;qV@{0gt9gVmZ%<;8@>u)z>&av*v@1fq=pyKEJ@)ggws|JG zJk9T}yjpnEdx?>;3x*mH0Za4Met12+>X`@Tk4U2(S`_ zPVp2q@rwj{CWGGuHpgBk$#Py7zm+$wThx}>+5qSg#-rxsUzK4--s|s^lap1GO1swr zP?^^;FaWx5XvI4NPK0ZL8KJR1euI_)WQ*nBjl=d$x%`!i{@GUDS?*0;!cL&oU*g1= zdto@#F0uSHIM&Yiy~5Z!h8x3-opy_pbaxEFTn!%I?T}&V55XH*#%;aC^68!$^KoN?~>w;D~7RIm@4gig$^VCDo z9r1YaD3ncxBr0KS2lWFynA~t?=j%$Cf=B7{07!$LA`;^>zJmVxaJ*X)uU)gxK{tQH zw(Mn|<+K)8texZjs8Kyou-ke$#|Cr->)Nh3PPP?B9=EODEys(~-1Mc(zmK|%^7}Pv zo41g@1uR5zUN12>#~4fROi%?u{k3DxP+HTYY(8@hv_OWLHEZ6;Y+q5IcL8)8`A4^B-nI0w+z0g%NF9cEB^j@ZPXL3yctRng9jZ>NmJNPp@BB zOWMhdHXNw)t#eXM*Tq|t?#_|fL81eea>U61$bS%v1PMs}ez9k{$NCKPp8mQd30Gc# zJRszUjuD`T?0&sqFWJQmih&kXGd!yz3no2bSPnSEa_uM>aR3s)I!FLaLc|(u!_W;k zvVuJX|1y%vzFX7T0Fk!0w`G9R!w_^b@C3{XN-_fZ;gcA2?>rKz$f$1EGdAuA_;`!c zt_wdo^*=fUGO~+1PyN!JFl{Jycgny0LWbYXqFwjR(Ub6r{Z6-lfn`9^q$|<0j}=&k zPSrt&vHlHRKtA+h?k5n>JCnNOrRu~OEWW+F zD+;z(NQ3tKx%so5=}pk{YD}$A#5^K&(dz7cA$Wd;`>Of<`}e`H1lnDIHmJbjf(UQgXeUuxz> z5es71=gY&A>$x<)Bn{_AqL(hS!RL`br6j>4UMcp6LnTg#ytCTQcD|+FpFUeDTD7@n z8E0JY$IM~Y8uKW<8Jbk=GvH>j{wLt6RuR`8z?dkAhbvb=a~f2x0o&5o29i(#Egxn` z*S+pAaIrX)V{YEO`N4H@c#9}pS56_VqWsY?TZ`ycYc;_L8^oisKX(HcEInlMH8>VJ zA6>;<_&7iZM!2<>nuZ9&QuHf)6n5XvGURL5(1D&PA(Xk1bSB$M?gHQNhS*D=`C zRk%jszr1D(%k^=sNm8C5;tDT$PiIC8t(9im50>$O{Wfq{>VY!CV6Xs%4}Wv?v;bQR zWjY-hsL_pzH3l&m>iWpx!#PHEd*G(%)4veJu=-f;Zq#Wxe8`SAR~)Wp&eD7FLaQyI zH;}2f+PznaPse=)`Rq6H)ge!FsKxIwovWzv?^^c*h}cAnuuLTj776pyyf%%&R+;yW z2?^6={xW;to5jvU9iGhwRl3yFTGej7gZ4~Hzxprea8XtM3d%fT4O{D34PAcaYqE$9 zY)E;Sv4NodQdDSSzV^mke|mbw`Ny0*;s<6f`v9&Bc`Rhud1WuZs1}sSDEWk8ZBAA6 zY;TPhx%kAa?m(E#UXEO%nA6vSK2M)T2{*X0HvPp`qc9r_K|zQq@6v4zaB2uRDV_y3 zlhmzS$RPn-&zl0Bl1ow^k7qS+3h_GIYL1!aG9B>zV*vC@3PfJm=efKvd3(#;?Xw*P z?0(*&+a;*bp15c!kGYN+xJH+VUrzQW>A)%rNr96em*#(4TP0SY(J=ZbM_@Kr{3(G_%-B$=4HaK;K+>~W4oj>qgiioyYN>>P@Vjhu;_rK@-_2& z!`T#+5sBQy1h8*iZ8fi%=6<)vos_;>w@VrXblP8LtG77swNNpcVC&S_RZIHv=9tF~ z6$IcwTUFP`Cfj~TlW4beJE2#CmSd^b#|0*R#<5{sDIrp0KKc!o|S7n!|S(J48)Y$n&Mx|e|o)>yg%YzEBzp8_Dl1t1Vl{aTQG zUWr|4>!P&c>&oXS_N;L{%4d}}edCOEB+O&8edb}^TJY>cnkjMt+eg}$Bn!+dS~|sq zTe#lA8c)~7*Am)eJNeoKL8l4jA(WFQ3}DRzlNVC4Y595s*XFUHSa7ut54wXP24%TT zCXcrzdiG%rjC^>l5fY8D`KdsA(`&n%ER+XhR0eou9nk-~qoYX6+ z;?nXFn?M&&z!i^mJlg>M3#&;ep!=Q^J>wzzKyFpv*4N9InDRK>%FTPNAu>m=+{btO zv5xj2!0F$O^wJ&$hP$8jKFS5TVRfr|H3(zPh4j)(J6ohdt#Ui9pC6N!(*iSR{jlsK zH7H@*nF^81pRD`4DqX{n2lh$Gy%x*oD;E1Tvx4}<{TS_w`^oJ87o%VQ-L~rfucr2` z3%)=0!MqJ%$Nlx(*9rk?qepcP29g!{=h8SuOaULZ5op7Td#FX1L2GP9r&p(`s8avN+Fjn3%HP7PZ#t&KF15h? zFsN{B+!KZt53e=8P78Qk!wZ@l&<`oF6dW8JpbxMm$lSOw1>&7AsFC~HChor*j$}?j z#h!#r1Z(4pJ`$7x1zhWH6Q>go%H*j61{Bsrh{yzvgT&+2%8&|^O|r`{WG909mriiz zGf)blx}&%>zi-%3(oGuKZ9p-Pp1R?%I4q^o3|(p?Yc%I7nwW)yKf|VveAgMA3Xkm!!SizPvuNyR*afILBdqMw8B(l6Zod11=rKfdj0k zI{}5QmMH$7LoErIdQ->+?fhPs0o+A#XUi_|T(3P4a9esZDbI`iaGRUBq+NdW$dTqK z&dAJ9r@2n$hL5|qaGB~XBl6SD%zVx%8NB~g?5Nv&q$qqm8}t5Kaj~uzTMIKQbITlN zJR93*A4vMVgm@JvhDtEtP&EQBns-X|6B-I+EbI z4gomQalq2uwMYLS7y~+)E@Vxlu7Y!(2Qwd*OGvNMd3w&f3)U9YC(9A*u;~}QQPecF z6w@Q$Z64p3pd<|mt|Zz4PY|N|%tBnjOlRfRLJVo$8E2sS6&sqFmN{edc3CA#X@=alOd08LqAX{etUvneE_QzjKPV z2&AhrsqFxdz!SE?(_nQ3#{;#P@XW4Wa#58Vb75o6BRRyszKbWnG5+S72Z$Xk{ z&TQrb_EB-rFigaQ)8JXcjq=*ulnTy_6vVLcdm=;;3ho*K{%tU`lw=g#i-hW4bhVVY55rchXPZ_c{U=BU4iJ~;9a zchi~&v!o6DhKFHQHDiEmrf}UAZIj8q!(bw?NVrTP6eceY)DMs^9-xw(WmAGmLq4kc z60blGWRW@ z8j2P~l|Ww0(#QE)JVOuDxt*BkjI&kZ%}sLeWIK`LEGHg4>B?5K=S9T=dOIP384W=g zl^2{(t;-9|W&OJ1JoV-?Mwk?alRT+=uOz{a-Zb{lXp|ymJzWCxoe0`%k?|VLOG6*> zIH)pK_uTeJEii3JzY1-_@yf8aZLHx8rO2#$ax~}!vt1FC9OW^Jcg^{hloVlQB<#KA z>`7$a7*rCm5EDn`LJ0swY;|X(g0a@~@!@>uIXP2&Lm-pHerv-xWh^(DF=>bF3-RLi zPc@>E$&g(Hpqtk?paI5c53mhjO`x_uesJRO;SOeD!_IH!&~T2%hYnoF5aNWLzIKg_ z_(C&b_OS|}_}xq`aL3N_=sv#it0obckS1dk2`+-}yueteiCAm#fFH&&*z~EpNCMKZ zte_!PPV&swY=g|+i!hd!Q4D%=qaBg|I5%zi_h`L8B(pMkdiGquI&LnF0_QwpUo;^2 z6x2;wmsQn|oiH|us%%QD<=RKHNzVl_6JB2$)IAN^lrpzKX9ih)1agfvPi^A|a*s{; z#c7z;cyE`rWhzThdYl;$MzBg@krN^31}45`P(&7W!bU<+H?&dv{Q;;z;B;?Xk)p{u zc>!SNfcx5evKl7r%xBoN$4+x)7@fXb`1sHUu-dPIObRu}`7lRi!4UoZHDoa54$b)I z^;k2|W~_U1MlUk(8CL)BGS>k?5z<&vx(GGDvYQ>nm3ms00VeM3Yqo=%slGkkpNgfA zaAS=0v}{`9mOK#@`R`;kFK}0Sa6q+%=aD`Tq#584Z$C^~ikNnUDZmLa^q17tu&wo3 zlpiHaXvB#Y$2pwfH2{)v=N0Yr&l?cY%PVkdh929wu(G<^{Sk~iGIUwQqqNsPAQksR zdb9Nk)hEGSkvSPmobjH>B&U?m$=#8690*jXnL$YbJ4W*w45_`y-P(r=(`IAMDHi*cMX;;maQ4ue_~s!rVZY zwif^Fa^J6Y4XqHV_BG+G9-L_|d-C}u$B3VTL7UMhn=ToLSFH9#QM;d;f3*8`pm0m} z!$*CYS05Wet7hVDT1QKPiW^`CJUdYXkj+q&9+x8d{XlSLnvqpCxMn(Xx4amCmAx7IhG9E;8obesKWI4Wf6aBfyB1d~V12UL;t(UuPwt06w^YAxy&n(!Zx-TzL?C2j7S_=G=eeYw;Es1d@6Mgi0bPWt3GU^J1Ne-E)XCQsqnl@Po5^o z7Vn{jb=GRqwDNWhJJj%2N6&dYFBK#_;cgAj+#nF}p!j-?zBvn!;pvDXADxsQ2sLXA zMl~M9Z9go_tVhJGrs>GRzO*?Wp?s1Lj~kzu01h%dR-iGhMTsyG&i=B*K^63sK+M9x z<7#8@c@0-%2GD^giCd&<1ooKg25SHu!7@ik++7Sh4DK8Z&5@_I~53Ra`tXx&}lw{$}w+Q&3SMQ`cxonWZd=!?NA5J zSgh8qNxew9rl-iD3iyM8l+OB=eP>!DN3xem(Xz}wIn0Mho%1LMT5sI8BS`Qs4<4fg zV*IU!NFZW*(9NX~5 zbQeu(NKXSu6IG5mk*{FNOg&Ev>C^r4)~wcxT>5tHoRtwpvC+@x;UC$a;0n?z40&`6 zeQ2Iqq~(3JpJob{q-9+O{cw`4D!1b-nf9RVq80!+cyMJ-)j4*0o<^fW1qo?vu5_G z{Wll;UZR?T(YLjhGVl<*d_Qu1ga~$xQ0W=luK_37obS|G8(C@8Y}CEoeQw=sU$D;MbMN-hn=D@C90tp2M6BbjZ%jP3k2m7si(qsp=+$)@RWI5?aIRAC2vYO zS}-YCFM%nl-O7u-L-Vjk(RYt*F?3JiVj^Cw?!J2VjK|(IXXcB54LZ$}Or}mBNGwV$ zyDA96!z}xeTIQ2+-40H{g3cdqj-U&c-x&&S6}eN#Yp(;MM0Z)U9$ZuGMm2jyXH0QP zU@B8rOU|n}4>e6Dd8%r(rfQk$Shzuk+xUyAOS;pA)*>u>{Is~&E&7EvBm9lTQENHz zFcA%9wt0nyISZB(J)VLFe`peytnFir%R`xKO|9%p+&P}Wz?j$-Uu8)fwtr!59`XT= zN#TzTLsA^~z52ypJ$T5j^|38@aeO+j)K}7WUdbtMdA-jFwN21<_C=R=ec%KXFc4CC z7VhCroai$)UsDoSH;uCLpQ!4D@Bz1xE#fgIkQ;fsl{*4dfksNf7;Br zc%jmzU?cKp?J=xeg~_xBPfin-T|oc?9KLdY>Fp!DUP4vh(_)ah#QmlMGx&{SwnwVR z|9IS?>OiwGy4+q zcMH)IJ>Tp>P@ymnsV>G-o3KG@2*y66W!(M)`Qo(G#$8r;Cx>4wN|R@`W_4}-7E)Gz zNv0RGO?vc-ndT-Iyvnu1@|WtgfDeP-%c#kF@fhaw`jXtoi>q^R+UI54k5VDe$~Ka7 z+49K#UO6!J>o+~rr(c9Fp+`NQM_rwFupsN>oQL%5+Q0;8zdD(G*s}evzy7kMpA}AX zN`#b++eioAv?h6Mf;Wd6E7z}QDbl*G+d;!T>>9isnmMc2fTqoQl)h`6s+tXOCpF#Q zFk821V^6f2^`U38w4nfrR@COlLyIGA3Is`FjXjF5x5Ct5a0jfvshxVSv@vF#IE(NN zZ2FsqmCsgDNws-#CqBoeW$S{Oy|zVx6T;R}=I5k5N`FsIPHI;=TS@VO+U2n@b2|lv z?y?;=SgRcclvvP0NdyVngSvr5#<^-k6U_XB_ekmPg7YkWF?KmdnupmrAgsxJC3b`U z5FK;I#hG9{_&F0#GSJftQ}-=YZ{outsMek+QQo`W%#r+2x};R*4(wNOOQ!LKx2A7q zm|ObT`kl!iw{!*jq`Be(Bt=u`0$@7ED3!_l7Eac&KAl%&=npc32y5UpRrZemStYpD zIjMcsZ8oLnEBQRe4;?y$q8-|WQ5vJ>V1Qd2p7;jTK<^pRW#;DS&Kmz0WL#BI3rs4v z45W1leuHuvOEZ3a>Pm+>Dy>YT$@1W>FXJ&5MdViH)BLPgW|wpUAF!+l$wDKD=F!Vq zMgd<$EB86JE?uqedoxR|?##rl*aMT~TT|E0i!jyd1n#aAeYBvUD5^Q~=!dVeC@peS zc%RjOJ5c3X)PJ|c8k+A$#Cq_`-Yba_oKW(9W57vSC5>!2*+X%PX0>?~uQ<>9dd3dZ z=d3Q;81S86M9%z5iJub7Edzi!;*;k&BGQViEYrD=u3avo-o(3F8$PQuRx`VV_$qKW zYWoF))evW=*F(@obQQ7_3RVAEjsB= zDfA#Nd79*o7KIjyzwPPZh}b_CMC$@MzK#bbkU*#&@nXZY+d#(tpPjMXn_U!>8QrCv zY`|T^z%kB1kjUU5)TsscXx`q>??51^lCh-wx5v-G;=ywv*w0v4<6h# zR>bP}zUMwUahpVk@`%O;sSl8_Du}(aFdW5P$KoTebH@FO~G5i`C_xS;Vt3ZeX zb^G>hh<>(ie3JS&S+{GRsc1G-YrDJjiue)7k)ROfA#anb;pu0o5Q@xH)B(q;@vSFs zzI%U(-gt{AtqXd_&HS+a)BcJQVpfPn^MgoTZmpe5Ex8&}s0z2vl6Od)q+n~}>?Iw) z*GTfJ-g|D(UcGcb^r9i0i)=5@(HbnPgSxsXZDU4Yc0myQ@F)u&o!?|lJuoXR3=ST3 zQ$5LeZ7DbdkivV?j2wdcS3k237IFa~$8E^gjky4@hESxdPh>*&QGiuoaQ5ar>K$wD zjp6UjPS#b5_K3*JXBJwjevp4>a57mhgxNhV`-|=1L@op*dS{5EUsv#bl5BM?(S`If zrE#LZ3`+QiZ)=>I25|LU>J3bJG>0UQJ!@1?{~E(z`0GhK#08Kt`xoUAdwm(Gz07l$lYbWm zRhi^&$vZv;AC9R-(*08F(uZ)ZN@pmpq(CGIL@>|_fYn_9a|{kRz)8g{I6w)hP2dV< z-`;)RGj~!u-E;q-8k^i|KCk5u*S+dV$9g|Fk(q=`+3ifPtFyS66>ip<);oZ&HOXCp z!SdZY_TVwyL-ZaI)efnXHAW$mLUpc)`M_b^+TOLUhOTOkfx^fwdI`(`|hk-6Y^3^0yWkC08)N0 zX|>*{{s0xU0m{z&w|4M9Pk8@(HQ?WW{eM4H^55+U{QVI7|LZgCneiHpa}>+Kx5>eK zJ*W_TjR^i_KcIr3hFD0;w!g19({Oum?7qU^9)P?ERYL^iML;-#|NgHl z`1gkT02(WVZ{SJ)bAgYGVg_C2l9!s5C&RM-rn@w((6cEW?AnX&M#qM;!@+u!^Ir!) zWJSAh!cYJ0|12=vTDHFh|NdSwOVm^lTKW6;AiP3({eONj|LE)g@yRV5p=L{2LtJTL ztdt*H(Frqq>I3V-pyYFPkD5v{{h!?1e=OTSohJYKodEy#>k$6StK>rczx}lel-Kz` z$Z`KH)%B0J|1a#Mf4#%s&Nuw~75h)B{$Kau|8)HIU$yjKtEDRV-7T;+KQWPg`>3?KLAN+f4~3$ diff --git a/testing/resources/embedder_tests/annots_page1_skia_mac.png b/testing/resources/embedder_tests/annots_page1_skia_mac.png deleted file mode 100644 index 785e39bcc5f30f02302e65f6842536b94003b28b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19658 zcmdtKcT|(z`Yo!UC{3hykS-9UH)(#-yNE#OgeqNn2MfJQgwR2xNe@Lts?s48DM|+^ z0Vz@fNGEsk?X!R9SN7iDIAfnN?zs1lcSLz1Z`NARdY<{rIai_{X(&9yuHe$#!~s89Uv@%YxuTJ%s_@4X->F}-)0LX5^H}UIiG+ON&4Y`nZy@seGl6>f2omE-kYnT~Or73``dJT>_2szMNse|f=S z+^YZbB2rg{|EtRyss{h7i@p6Z{9j(Q2srz{x_XgG?0g8tqgE!XPdP2*SjtG{*K{q@wKq$Z`#3855}G!9#no_|5j?X@!`XVkO9sH z-(AaBc*Ik+_Iq64UnDt9*YSPp*>apf!iKVCNEjq`x}RA5n)=WrjYmXd!GC8BpV82) z{@IJckA^k2UVJ-WZZLlp1s~$zg<>3?=sK(&GijF-Hy1LPDH-y4F!=P>M=q^Q-}jv~ z`tGvBdCCcL=PEMTvptcqY8#Y9)kM7;TSQqlmtewDPa>PP+_?z{d;?UsQu%7aK@93i7GZmms0(5I+3Rj?1J`x4r7p+Qa&yl z-^&es=bHSyoc+JNybh6<5Vao(r6ggN&CIs67_Tsu(hpgR6Zb#dntiXs7VZ=4Rw_s7 zy*V+QD<2WA_-pzj7gMU=*374I^N_4^Bthd|JBb`}cCyB<^<=#?==3+*$7BRz?u1$H z)mXmKLW!z0E8SZiN??$L&*pcgi@UbC%rBT8k0v1mR0 z3KLrGsv6hk11jZbU|ERtN}Z;VN!Cz(LKJhzncL<>6=bKEE2krKFiUFhSz9Q+f@zLy zP->yiJrZ@y^SLyW;%fVc;)|irVV#0jT}iPoQdQ{&a^yn3ml+NZcl&6RNGoay%zkh* z_`T7eCaf)UKtYoB$#MMN;}>h$G67nd5{Yxzm4OUt2D#ufyPP1U=ZS&++~!Wxb#ULEC2oh?<`{Lr>2%D69roJ?z`#siIa8uyOnHoD1#$E8-Qm2%B*uoK$ z6CL|(OOO=bgVjL|C9mDrq)a5^Wrn)v-1j{TNtmQ*w13StXGENz9@_cuE_NQPSQsyL z#l@_p3EN?w5FM#e$;VLfJ%;LYx2l!X*c4I~28}?^hTGt_SPY84n3AN}IXNipz8BAE z=JyU=B0oPG=I(eJLDryULw5#Zb=7dRD=p%wei8{vGeb=9y;_=1%Gzj=Fy53evuba{ z#&~5VFC+zG2p1~r)7?KhUZ=cejQHR*S#3!WF6FZYF{+I$LfkVw`HU=k9Gq+!L+1F1I6Z1X^mliJV%ISq!3_z{JSx(eiuB(aYHrdvU(D*Ypeoe@~Ri-f&xWU?@e% zL!<1Mj8fjq3l*k~kMR%iQ9NjaV!eqvXX9F?yaqU)WZ=0lrzdJjoEb&;ct-2zpxV#+w zvp-evRn;cQqL|VSx3Y~Zpa2k|ZiI5E9(Pik=ifRfZG+pZMY4=#N%^SN^<;L%(TDt= zwBy*5JKK@hw;!*VT?(}^@zpT@$|z)glVoX|^?RlH(EiRsJFTF3qjx#j@`7|yK_{MP z+qpMW;hk!2)oRCj4&Q3+N1@?$HuFooWvwvi_YeHrEvGJl^xhqjq-@IZ%UAfI$UBcc zjxlIyMfVVpIvGgu_Vq4IU%|N7qHduM=R@Sq8ym@Xdl^haAPsUlCB-IkOf_}-agQ6U=bLSR=VkkvU&!p)t| zj&^tLC`ly+Z?NY|l0x!V)MP6;Zl4nnswQsfOQSn-IB{T`zVV zOqS1_s<2_=)u+ealBy1)g_?n%X{j^qBhI=D;QI=(5Nxpu|GRgA7gbi>Bi-*}_f)dZ z=1ZTLZ07b=650{nAYqElUEj`KY!S%hQ1IEF3;OgEq$;=I_NPKr7RO872|3b!)n_=* zK_&NR6?o@7-x3t8b;cYOL(M-W0Wd`IoeRQ0G&PB>x(71ETMxb)OK*->=J2tB!oKw> z@ECKnyJY;)WwzeUD){i%v`;UbLoDW>qK1Ek7B27o+i2kuP5hrBhJOI0{tIwI$)N(a zn?HihwNB^+fWt?=kl&k=^x`gMAuJ%nWXJ}cEN!mzCG%3>GdYsrFlq9219b#c?xR;E zUw!6-z}z&*Ic|VW67mv6l&HhldrYJ1}@VTVunD0 z0hK9rGGFzLfqBq}i!hCJk>WpI;gK}1f#+_{Hi{Qc&OE=0%anTo5=y~}#_cCyZRSA$ zEHP9DCa-^5V)y{|9Wy98xpggeL)jVPt|x;j*3dad8GjMdk+PpJ2(hR0*uv>%?_X2x zE@;7aq1@MCAZLlN-XF<*a<(6)KRAlJ&Na=izm{=IHu~st-Y+~Py{R93acmcVkjSPS zxT-D$*={-iJslfh7P#BljgP8xo)-FPZ8`Q{=hY1o&JjAwI7X@8pspSxo4hvkE6tj3 zCh!_m&m@I|d;yQ7*_ck!`fWwR3F z`jiitGU_L>Y1cp~)fB7t%Xx1?R|m7K4h=7ga)PU45{Xc)4c$cQCj;VhzOV2bbg168 zn|^ShoV`1`pL~pDxbJ!Q+^Sbk!QY|bG}UFakk~N@Ks}$B93dgikM!tDXw}QXtn3u~ zwy5AVy9grMYFK;tJ<|pO(~$+t>$K2C5U%FF3)c(TAg!lcQiX`oXUc4Bq_`<)iUA8uEBcWo%!TpnD}nflD!?%OMs$bPrRYg9Vy)AzCKnwY?x9uD3NeXluP5H zq^zMG^wD=A$+JI2TTA+I#-oa=*|}t|!D|D$JMG#!K;7uM_SjbFc}xTaz03h`Wm8+A z(nG-kzc(VAhst3BXEDY-B8-1I}mdDvnH?=1>~skc)Li8>$lYr5Y>q1>%)U?Hzn9$vPE?E34KFe zAYEgZk^L$1Lq}VU+g&(B{Ln*CDY*H?WSOjXs=R+0;n51djLkLk{OJ|Ok(ZV__rZ~x zqXRu)-4#pQf4L*2t#8uEc*TCsZb@+NJOepNFo%GMK|;VZpbS8ZElxJE5(N%gVVzqA zqy?1i@T=z1^c=T^rLEZ+VYKsj(a*QR+$STgM>h@pqZjPK-rS%?tXYkLy{CK2159k! zj(E#wJr2mI%@yP)8ghe~!%NghI{to%%tgd2P&bxx>Gtho^y>Y~)aVYa19{RC+C?oi zdb99a&^?*8pTl_p`#=A9g4_YsduZJ)s32#PqTzXMt1T%f}s zfCrXovyDF8qA-1Sq0&&B&e{CYB7M*R+N2(UoMM2FqOmR-{`I}wc!|Iv)aIncEvOCd z&6`kh5^8hN-lJQjrNi<2-aQ}a{ywJlnM9^;ZN)Q={yaZz>CvuWvmt+vK;Jv((S_fQ}(Gmnb6!^(oe; z_X=lZKWL>Aul!(<@r{j(XOvQ^c|w9Z5+ZzMHIni=k}$(5{b!tOpFq5Zo1#S3m4zxW znh%cSWRf}-L2W|j1xF>nKn~Q-k=1luCVzhcQx%=6b5?(m`Jf{;;diY5qHn>QC5o*I^Y8E<~;o8#M@%aVr1_5e!sk^)X$XlcLb(li#T|~mr$HkbpI<_rm zN7YYF@&_W&TeFRO^C`U~P%A&J>mxU8kAA!&c_*Jh!f%!I$+9!L-h@Gt(XiTezUAmz zJkcEpm}zqx@yYJH2)n50yKyuzn?<*F6=#m3$yXWrqXw$ZK)ajz>DfXX&2S-7V}4#0 zqi6Yu#@slLAzj4&@v)8;EUiv!5N(xgHQeO4cQ-UlvMO?1sXuo61HvTy*F=>SWJpyn z5Mwmn(mn2$wl!8f3UKe@b=(rtc{?Q(f^U+$k){_p<{ECni=}?3CvacdXUn9sh$a_d ze$J+X3Bje~==k>I3 zdr1bB*0*52kvlHC7_Z*9HG%WRG^=K7Ct_c;&sGg!wdXe*`2kkD76szz!Q4kg)r(q?0!u&*e3hGrc-*X%ZFr7A;cd*d-6Bx=zjvf zv(oy&WA~FBp@bjJhjY`_HtGl0#a!pkrV(-gImFS6e{X#ao~D^2d+ugrkM2uOI93j& z<~Pd}fIU31tJ8i7I_4DYJO^ky=ZRRxigk;Q3>-ja&^`<=vvb zSTSqzV9$>CK=O)7I}QmqV1C1?sfH!0yl|PRPjs;!SOLt<&dmck|NW!rL zyt+Yd9~a#f&q$9Q6bVC@8-MgaSXcC2#+p9`U7Mj`VUb4KLxL_jSgYTjZH?^!0%Ayp z7XG3ON^#IJI)x1qLBc%PpkM(agqqLjiP^%C95#~-`WDb7{LTB12~YH`Zn6$GQ*m9 zX1T!{w`~f%-LYs6dNHR7z*8{?AH7Hesm^uy-SyVIDGGOxUe1`3pRE1e zK)U48FE|TU(=(zH1e>5HyTUQAe%ae@cCysMyjUrtudXf=$QRjJYhz0{n1tRuGWq0g zGqWJnCgd{kg~vSjm_t!eGqYoBbi2~9CcLkP65|fmYx%xo6^&#{>kEUzn|a;FKkt+Oz$X*89assy6-B^v8s><@-`n zmK`?>xinHA6_fyS$I2fxqoBo$Z%j`LwW*bB{H$ZUQHvWh%XeYtEtEigrAVkhA)`Vd zr$3&)s@$yk{#F zS>^THnUIO!Vl!BD5U}DL*>#!y7_RlPCjLT%_|d}|Lt(GC6!frOi}d4IoKexoILY|$ zV$3AAKB?Hyc+a071f{A2PDEUFK1uIM>cH$ho>o!MnHQ2lzLKEe)z9k9{DP;d%KyfM zjHXwTafz?pGS7Sn)Qqn8lV;hwj$Bk zqRGU4X7eZxql>L`dJlv_@+(>Q4 z0T3H}vzD=Utlm>o&#V)uE4d$QeOmth)h%Voa~cxm2 zqQTkS6lUlqPP?wd!PEPQ+eJmS>j@DGaB^KWIyj^#d8LuW2WxePl&-{Cm1G&Vts}Zb z+Oz>^>Xv5<4^7_Z>pu~~k!^Y3**1*h7M09UVAInC9{?MQZ#IvfhA+&wE||DZ4G*JJk?YmuFY(Map7Q!I?#^}a6roV18m>Mqtq zJra{@S(xE?dF~Q9ze$5!4*+dCVD^=8gxcVidv;eu+zHg<9|ltchSA~A@x>gS z;LA6hK+Ys!$0O?em%Nzd8l5Rq%rO3lq*8ZZeH@X6u^aBPGNC%z%e1uwx~PSlsG~EX zAV2omd5PICsqB&Ot$K{H$eAju8>M9?pM*jP9veWrI4p%ksp5a+mH;Rx@+5ddIpZ>u zwhG{Gh#axqvSK&V)qNvt*KBAG7CgnXYp$y<|IG z#>KtCXjq!xovY+5{dq$kQz%g}QClM=P`>Lmsoqo{~}^Jah1 zi08T-1Tb2&=v~csfHYx}c=i?mxiw)Fc!2T(L*o%qy{v&U=&(rmy39C!!WTEl))uW* zp)13yN~z7D@7Dl*67o+LIFK&AgZe&(W7Oa=1*&`AqT?fPUVq^6uxpp%R3LO~u2~8j zly>%96j3xCcOkwK0z@BD+ua45SRsQlC}~OzThWr0y8qtMeqtRfWU0NT!TU{6tfe0! zHFl&YwI_J}w)wTVN(r~YFPRezDCYZ~k!b*(#gaO!z1=_0VmB`UB92mUNAYJs6{%5i zIxUvAy_FRSCSom?56q&8UE{9F@1*G`jT3xh@X+BN9ZT0Dh@f4!Kv`nEpHDt4Gjl0I zg`(qx4DVc!lT+rsh9+iNP7L5=Dj^B05~P0!j)}ZcAGJQv8mIK8)rIuda|EIj?-<8zA z!`^@P`aj|D|5Q-_rCR!L@}Fxgb8aCq%-|8$P&x#dD_X?mKQE2}RoP-Ykp6~C`@)nb z5MTh%=3^6$n*e_Zq{n@vBcFLoCMC0XIiUE?!bRo0*2e$?$t&yi^D9gIDd@Ueu@|SU zzEHDI@NyG-s9Ly9T4l=#52~6|GhGBAT~L^S#$>qyxR}|uf8g2zoogSkCUcEG{K6ld zCfnd~+Z%Ju0X*z{LucUL&JK7>^faBYtp<=a0PlPl@oN?^XMI`)5z8V6O@PdiF(?W# zuYa~6@9YL7T~G+NM+($cuZew1ARuCrt`F=4op&w3;~;_{@>%@mEoYyd-An+2{oDbV z2S-Q84f9?AqpQk)E28mzPWJ7246BzQL%i(Xxt4bUL@lwd)MeM50wlx=5SD=kAZ-iv z-p&?vNCJxPPd5o?BlIyU#g0qMdUeRIveo5s%(SdX#TY8VX3(vki28evYyrt6HVqK8 zHY-5x!Kfp8_(Q;l4JW3r7VuN$xt$~9zkdfGXt47@@&z1c(BZ64jonb;PyyDo!IQf* z5GX5`4VC&x8bbQup$_N(RNhv$UZhJ3+YMT)K12ig`Uk8R!*R*m^1N9*1{CEwXjPAm zoZf*pJoKu34j^cCgF(j;aqje*X7lk8ism|12Y(Fnq4+5?<^h(Dc%DKP2$>R z7Vn(k=6o+LYE4VWGpLeI-F&*$$WRHFe@%iKEh1E%Y&qwD)v8}!t&=D5g15iv8H;g~ z#KyF^<81nyRse?Ea2kE=n*AxM?%0H!a8Dyy9KYT%M&4=k;G!3~>o`@51c5a90@pBx zYVzmsBxtFo>nQah{C?|WZ9LNb1(o?+Y!KRO0^ZVYiwd%5@0g3&N|_LzVd9`a1f7_> z)^JVi3sUZfcITtoa^PSrtODz7DXd)?OCtf#nHnVu>~jI?%&}hZU2_oB~b& z?-oOkl9ixQIHl@7+$cGrYMlTD_?p)olsStcFI9|NgJt4g%l+yZ7oJM1p(S$}ey12p zz(p$p83+KJcs6=-8Q=qJK5ZSGQ>nnCXM;wORY21ya26C{&zvx1eZ7=ii6{TSLBjLr zS2)s|+*%mr(U#b{jM6YlHMnJL&5QP0A$sm*P+>Azq|K~U>QfKeuu1-GGy|0FRqB3+;rs1NTfp1QT$pP%%j%e$AwTP=LObkJwyF zAfz@(^F5q(I`=orm>ekxyMD6Y>oPyMGQiuhu+Sd%ZZ24A`a|jK5Hv3$De%A{H&Z>O zdTPpP=f~!XX8U7*oHqDe98J7I4)Jkio~mz-0>Lbc)3)*&DWWS9~Aj7g(!BNJJL z=Y5xm$!unTOw}EaHhdQupIqSwv^0ohMdVzjR+>u{kYU{Xkjuqaaq(`eNPn;$p!3(G zviO|XnhC8AJia9qo2RC5GmQ~u?#8=$M|-%aW(RQQ49t2;P%^$XqkD;;eF5e^AVL9m zLXD}znVNt{fBs1jWkTP9l`LD0>RGO-WPNV4KpxWfO8Aui;cuY8JP8Q zYVs)175BDVP8wEiK12#eeBPLq;>{+eVj_DJE2JC`VYlhvc{Ro;Rn4YMV1uZHJ{BV9 zGo}i!i52QqS4NDGlOjAFL=`>j(J6X=q%`;+I3V)(W`oTyj4X|^tEgpWK^Kr#*j`|4 z^32@X**O#q=TN`PHDG7av0Z=P=z^ko70@ky(KL4u@9`2}*BQ42b_Q8n_fLeC3qLDv zq1*&MgqDnEi|3Ru)uVzqGAoM5k4yc-IY@yDP2rY1{4x)|S?#Y}wwtoLa`l!19OH6rMgiirw!&qP*{ z=+w6Vu8F=TtoMDDVvN(ldK(WKX4qn>+PkZFhhS}@N`O5M`oS(KI|+qEFLXbP&<$2% z0licF3H9SYh#M*?!`WlE{MRMHVKZ!tx5mM8z zb?v7LTFr%E&po3=&9#|E>bP%$c5D{#BN%@&77>0DS_;rKIDsq=bTbWDZw*5vRAQvL z0%<)id-5~yDJ?4^3h32u%*M{%u;QJ_hZ8M~ajg%ve6$}8*L)^2DyeLty7=bRbfb@J zTXoamw{|$C{q%%eSCW+X=3U8a+>odOzrC%v1@G;9u|oJY>#$yhjqj5PzA){(fK4{( zj6)SkGl)Sl1agsAa_PrS@lnpxTVXcG(HtB(l6xrSWFn6QW^qUXmndWnL*q6=IO^Cf zesSppItfJs(iocfC_jQx%h5N*9;Kh*=ED|E&SjA(kSPxXNmxP;;s3}=H(hSdfJ4tBRUv910;_XW!pf_$Un zx^5J3cnwByES-9mu|bw*-g%LhX37NAE#K~tidS&@`c@!SJ;%Jx$?zy$TNc8lJt%ve zF9I}o)QV2X~T9u%PGO%x10PxMt6murX zG4!X^KUs}HZ^sSO$k-kS+I~M+GfgfUk$_-}xR23kLyWh$Peh2H{B1(kwK1YY842Aq4g`{BfhN|Uv>O*AweogU@ zF3%ingyG{Ag7SDOl9Z+~)0%GN*NMrQnhM~c0dVqIT)y&L`GRp(t|j|l+7JJ2ApL*E zOz^*r1f9F6iw@@LOS<>a8%#p0x*o8gVSr*UH^u|ZI7R?@;kLOuB7)5AFQOrh@BrTe ziHIn)p?A5{LaCwt-d)(GR|3Gzf(XDP*1Mylx5WW@X5I-}PALGEL3O0!GwRQlIemd@ zJ)8?LL@-MG?hKXeC^H9%SbTnd!mqt9^7N|(5bs(;Z6YAXesb-DHrF-!hpJt9!c5*k zq!0nVwcwG%hWf^JJ5dnFvkl3B8mIPG?e4(N1pJD?_A`rw;gV#C*t-LF0j6^VheQOp z$s!!Souoi6Es$FvU_kh4Fvteh1HG8Uqy>nA&He}efJt700q37m9Njm-od6ma0BaV$ zONIt8)WWSG$AAQIsY3!oUNG?BsHfc1!BM^R;{j6uoB+^Z(kOnjrh1_AToWt3baYu7 zI)Um7{?Hk`0QVXl@I`!dod+avK9YUPuo)Ch@FoM}&%mc1d+iRC{R@DwK(7#W{_e~? z3>{sK49u0d%Z|NIiMySAn%lF@(m7w|#X^nXtJ!oy@Img)@SyOlCvS8josw*1qJ<-< z)U6r<5WgC!5l@@|Z>r(>Yf2R3wAc~F9Jq6pi&uoySuqPV65YYXfd80hyzi+}u9jYS z9mtYXO+NwCaDKd+1Gu9eT}Tb!+S4~c^pr~sw>s{V z{4+02-c`L)O$2TSKB>C;2phSt^*69Oy^>+V_fqpVZpSYGG{y>3KZ@|X?8V0L!&S^ZZW82a9YS-99iKd zX*}uyhM?llK!gmTM4Z<+`R}flpTZ`KQUi%HrfnwC5c(7w;;je{Nq=5c0|kF`A=2qd zY*%>ajEu2~uaTRUH<;@P?cpmx;q>G9`KJ?_s-}Vi? z%klba?HSO0-VHB4x>%LNs&aU^2zvf}l&ZWpFlehr&+} zHk3tGbfay)wpw-)tlR%B?C@wkTQopd7w-b{eT*01@lt}^$n`fG*O=6W$eJ@wJ>y!W z=F5fevrtma7#JJV!|>s;E-Cm3E-@g@(!(Z!)~RoObD}xGhx6xG^)?J>+tOqLyhAxk zA3fxe3kvW1QT*Cm+*L@%s*C94ybop=Oe@yrZh_Ej!LC`oG7qsmb})o)-L0S>p1=k} z3x^=a1~=7>GVn4b+!jIAk^Cb~+?A=k;|zl=n<%Mzz;IJ7GHA8wMbYm~ZUr9@z#9bW z2)mbwtgv31q(`wuKs)KezfrEjjTf?y1nzG; zfiK$_jkD<%Ps~+?*{=kF-0xFT|IE>oNcda1hrfr>~ z^~m;{uvo&4Kxcsx-lxC51Z^L5TVo!z>67 zVgAkrNuV5`&9E7dp*0kQDBDbSmS9DUY zJ*@z&M28Ku(75*L7gsH10+!%aEmN3kqYh3)_#V5M=1id``2sNQ*}e2;gM4(J*4Nc- zmyh=fk{v=diPE_Aj znn1(Sj1mwq@?$u@B3|R}b>3T7?N~GfPKre8EdLB+)MqHW-0kCXfoHwl&|{@hi4PSv zH`U=wE{q}gY71_}pG+=>s64v2|G?h=p@QHWsGc^gyN9~}eaW0S5N^{QL+%_CQf%m! z=18)ujnAXsSaH4NjE_^frUIerLiMd^88mWOCVmpYg$2`dLqhVF4&UxHK8|fhbXKmG zl`BJolWYd6%M=kZKG=43?5hO!_7TpbSAyPvd>UbH8a^sb^|$QNv$2N!N!a~wEb-q@ zc3|6pX`&7!>iLq(@dI1QqRVdUcVMN;tLXIJnxPf{1`Jkb7&Hod7=jhwDn9O(a$i=N zncv;!_~4-kqBa`K0Ls9DsN?rbW7yWC-#6oQ(e(V`rUFO6v0S{fVN8I&&Z`h zEs}!E4+!`tuy(+MXkt@E%BG~S0JKp?0gKNm=E1b$XD3SqSdr61vR@|SH2^I{XQTmg ztPtolpylv8KNx2&e^c&m@@`FHwixPbN-PBi1^S{D@Ud`F#jB;jsMib>WZ%%PPk>bf zo{&9{?0~IL+5q-eD8<-?Bv8wnHokT^LOL_uGi#ctzl*8{6;Md<*^kfr+TmD-#R4X* z{c)n(O3Ieo{-a7(8E)8QuKbPr^MGRP&yq^HY7Q7ir39vCkO|GirBPB%KuqTQTRSwf zg8^mr&a&?wFrR@OAXNq$?gn3<&elS!_rt*GhM`;%iv}d3T}%@JsNX}Jb6_q&1L+HT zsr?JL>B`1VdI{Z4LjEQJ>z>#DjQJ!+PhJiCrWX^nv5u$?J@gQA=Cu1$Y%Wqe;u zb&s78@zSbn2&{RO1AH&lx)i7?Ei`glT9Mf5cpZJ4X?MLD_;Y52Kl}|jT9`v6l!5`| zLx*(-(ls@`;p6|bd_@zSp1@m>u4KQJH{55CU|0MZAi%64`Znpi?qVZl&&1uXqm>!L^nx212t{hUYNWXx zsZGh5I~`v|+jO~AVi37)O^As}K$?1PP9)m+E?r7d&0}lwYTq?GSLSm$yf}f$oS|2@ zHc%EaTKc|eZ9g=egFg~*Nxy*Qz+ecl9)813zzvH%pT`c+a`4v!r%2Tm`!B|VTc!O{ zX;mn&vn4a6e0P4V0y8VHoj#`6zB@;wK}0VWdoRzrv!0KFHyZ%8@q7HTO45+eF&SSM zWggte7{watytzbo29mB;W_@RzG^uxRL4D8uH~;`>KPv0G?>ZpbDO4ociKiD$zi|4# zO1%99UL-MYE4zAiEIMM0(_le!6!m#LL|XTf!4sNSh==4)Tz)6w&$Vyj#B~{})G~P$?mW$Tx(X(w z1ED*>j97*A8g+4bgn^VZ~P> zEJpHGGj*!iPkU%J{EL_o)z+mQzeC!RE!Vm+urxD8w5A=EY%Z*q+uNiz zN(yhU`Ugj{%N-3@O2X&V1ly{ZD6@>c?{Jcb5;Za6ltbB4J{8uAgDZChWP9?B6E^6Z zs{Qblu#cG#O@fQw2~EV2rS%h-L8Vh`hBBoL)F=%9ydm0L4QCMLjGuQG78qQA&9(=Bz<*cU8VsrIh1AS#bE?y&83PN#*jM2I&yvy4A*l9cOH#AD;CK>-Gp`J)x%7Zl%Q`R&{1YK$ic#{3I zfRGm-^&WpfvHxrFH%i1=VTj!&r;pD3(4FofmY z5Otoenx<$8C5{}lM|In7^n$_6^=9kKg$+q8GQG>q^G#r?WV!i4MN*Q<5HeHH3Xk0J zdl@WPgs^j@?Hb8Yg~=y)o8M{2PP64{1RS@o!Hq|M+?X?cv9z)!`jD-XnCd4;^G#=q z1!gTSJYvoAfNb3o8qke>wD%t?IhkVD>hAzsHeG+WwEW+pn2U1 z7{mitSortXVYEeEYq;42n7Q*X`;E3rA5Ne?DzcHt{OOe4T_fy%ovGD$mnVOH{ zN|JCGhYX=2Uws1kOL$PerX|s3Cag$n)b7#eyB}vGzYQquHxXmBx*e}1jqJuvuLkb zt0sTwife4&i?{Ips1?m^Qi9kRCCX{6%Wi-%#|@EW6EN}f6ipR3kDzz%ee6n2+R!kHvLLwEtkyQGWI2c9Sr$p^OcN z+RR9$Q{~|V`ou9pRJg2;SCn17T8`a{35lo@v4^cbm8 z`3_SkOqkPwT-MaXtgxr~>I4J8&lj^Yn1!Mh+CTavs zyD%YAKd|bx*CeT!g82i50^8W%_WBA7XbxqMPI}RnAD<@=XBQ2ihT)P5jEv@{u(YW( zWc~p(%zs3R{6!Ns??bV5AQJ2$wAU6$3}D6Tk*5^uF~i|Wk8+Ti(thp^&|Ch2%V}-y zKzKu6=DCp-r^MzTWvqP*kO)aYw6VBLd>#A!0^L!XLOB`ctNPV&)Mm7VC-M=6FRZPUm)s@R`RRYdD8egz# zgZf30ODP&##}mSzl%lbuJeCa1?fUAfP^FsMd+*#NP|MBC^OXxM{9JU>^B2Ya7~FJh zwsWs>p)^F&b;(np1x{5(&3}LaCF|JdscM#F(ykZF@Ar$PkskB#!qGQ02+Gc4@@8SX z%3BseT`iir(y=RMfMYKDh9xbhnm2-%y1H1CC-$7;9)7*py-p zF~2$|EQriIq}$d6AW=d>zwh_}D#JNSz6x{wvcZCQELpfV(8+QNiFh zH|QwxhmT^2=BnQAvdlo)5V6A2w+yo@dcW@*#XhPWnx8;t90JJm&AgxFz`JxcST8WK z$S9dY&#b+{EFys$s|5qHu^D9YY3J|C>LtB7AxiNRu8&H{a&!VR zH^L}8whYUCW=>T!1aQa6YV+JgaqEFcDGyF?4*a!zdxTw)HnmWK4R9eWfAtvBy9J2K zni{(rYO}j%B98huk-&w(0U590OA1_j{Jk~gd#(M#RqyQV4b{BBC7cH5>ygTv@Z@VVu8s6klnzYriEQA6p-MZ`yx4ASN=LCe+-EG zyZSL*dukOY*7<037}YNTeyW>HSH{U|szwH1a2 zBJ|yW6&ELPAy5pVNLe0NtiEo=dhaF=!PYxdP_i19U?Q8Thja-XBt^eKtIR5U`3xD_wL-9&$1c=yW=B*E>6ro*ST1r+q zLHc%3GOG@DaHP8z9KtSB*%bU5TUw^@VNv9S?aFvBW4Tp1EyLfR9<~x{le$(m!TF$%jtm=WU;B~r zok{O$hy{3mKxWFd?!5lPI+SDLnq$EeHcjqUyCDLY>g_HDoJ!CZkVpcZk)Jz*1eMH7 zcuc1bKcD_Me+qjIvTkew8^p?(=%v+ow0J+DQr4nwqJTu9nJVxi3aAX=D+iVVhrO29 z2N;1uV?T<=3)8NIFaAKhCg1I~F|kA!gGgi3;{1I{|98@pQ-_;tW>CFEUch=k@2}<% zuBmLfOnYzBt-ZhvBVCmbv+3>p76^STsGliZgn{c+QJeP{YV%8P&SS5_{IIrz@ca-b zsLNC>x65}mYcYqhr=a41_SJc^+9pHH8IOc1bAB)24>I$KD3+yjl3xU{?*;0xGNm5p znN-I6PoO~TX~W5ayvYt(VKF_?QrYi3+HL7=;)tnFv+K1aoeiT zv>z=_Bb`zvvIX-7p>fg9b0*MKj>$@w*^)5yd4{Aq{Gtlx_tAIt8(5SXzPS&gTk%f- zYwMxbj(HJcW+=3}{%!sT3G+}+>*2t(+)+eqYw)ZbV*$MSoI8CcVZ)Z0hES9Sc| zr1pLWLHu!kKmceuQ7e`%2WkGu|k;m_X!*0z6m zO9%qC{C~RR6^^d^g+1LqTwM)G{quSD&F-{J)+< zDO+Rm!L}yH@XsflTxY)g9rgdTd?QGa%km*|`KbST>(a&dk3L@lBLX|w6r)gv`P-25 zBW!|#!6XSm&i!^0*e@lj|5nld)BpeLME>Killhl1bs1-WkDq_``d4vvdH*kC>z{M4 zf8%2RsVDT(7y9?>uVU-3rsFTC0?@~=|NR5-{~sCa|AnRh%Vqz6DW&|+o$!}S|IecT zKmYu%cEVpy$6rOp<^BJN_PI`dnOLlbc=gcYi Qj~FvW238EV3vdMi3N)5SCCSh-^U#2@PRsYb`Bn03k{O zOcg{3iv%G+2(-08Fc3y!0s%sbVKIROA&`I=GVyq3KIi*)=FEKGJ@?%AJ@-D#eeZpq z=lwmupDy`%YkscxIRF6A1fTZ|004Ht0RXiFyVO*70zx#tQ4NnT`Cjo-jQ}6j=>tFj z00;yi7XZl31yln7)zyG*0HC`YzybhREC7cC5CH%p5kLt5D3vEpoKR`_`1nAea2O1x z(nBB+85tQ_Sy?LW+}zxI_wJPwYgIO?tE+2j$qfw+EiEk+3WZ9et4wxxcmMh;pr6j7 z)9FJ@uF5=%#Zr0Ta5y}^h|lM%{D?%N)iveX+L}_Sa;V%W(EJVn(D?)GdFIO36Jp*~ z4}EX!xf%VlKVE$NqWm)>5s=vpUX11WhGBCgO6ADgt7yod|M-5^uHY7P^AD4sBR&(Z zE;XF?JpRHISh-`z!Ef_+!9O{^@CUr_#B(fkZ;*+h_S~Yaaq@t z=G(vI=aw7xV%@}e3!DoWPKjI&gM`z@ma*pIC|#q1rE_E2Uyqw?eO^SFZ2ID1^&| zIF@dn1!Lq2p3bQ;h$F4n7z(l4dZLmbkw}CUuc>dAekz1t90oy_72DCf;p+pmPPWA1 zQ6$1ZM71d|k6`!fZokN+gf9|lTiacIsPQ&l?$Xh`dv9_O6^*>DI}5BU7p%H zYtWR6XVIYEtd4~CW~nz5M4QYet+G)R4->42j#$m0PrMC)721j`Ub(`tdzGnZzf&N_ zoyomQOzxt-b5oWYx4V!)k~6;4KV=_-_um86pba@L+>P+K9Ol<&S2ID*3Dawi*7hPK z88#jZ)%J?)4dFky8Js3}6^bezI9n>hz;$ah%9r!jncaG7FR$9gZZABDHojQAMxI!1 zs_ym`JZ~E<{1SWIl&d?9GOr0=`~hMBFJu?m7L-=JpV{N?hzW~B8d_xU#iPkgtHnS4 z8&kmlPyd`&hgJFZQQl?Qz$cXZHl3DFvDfQqHW^#bC#$qztPJ@VxA<)libLAX7A|kf z)@lyN=WOA4>nU=!jrJLil&0^!HLli0JJVx%a%I)c8a}fMEGkt$6fZYr7<-|ywd+4|8s?*`{qGgORu*V~RF zUO?%|!iIp<8{9;WLwJ3?1Gv8IN+Q*BnqNz*F7J0aG48SlUN5QlLpj3P@P#Y9*((*f z73_$CygJf^d1oEB&Ow(7$0w+4GOps`q)t*;U%~97CxH#xwKt~u2L`*k_6x!;BBW7P zaWX_z1Uq%n~^?l`Z|-?C%=lh=7w~ zKkW_HHKbf z5F2>s%AQH$7(d^vEV14?eXnGHb;cR`XnMl^S}w|U-0*PNbq~KmgoV-S)4~LoPEzrz z!$pII!o=m92aB!NFTt3g5^Wr+&avzS{aKN(KyFOwhlc|r`09snE?Q*!0@mM4`X|RfgqU&)q|JGofgvf3rw4STqmlVm`<)k@=|*oR zG9IzFO|Yx9j^UY=I+ha;4Nox3uvY)X`ijpVorl( zw>Es(t9Z2|_V;eTz3{A^Wc0?l-|&=)tkdPu6B}=e8tMy+tmcdIHpe4>SmK0lz1k_(9Yma zb3!a+JLCNIe^jbD2LM?BM&IYELvV{pUUL!x#Q&)BH~g zkZb=c^Y1^QejNAhZn%lsLAt9c83bkr70>%{jqp)D7lSf>sf_DcIKxg}xLin+ho8PaPsY~bqFA=twl*V<7p}`1tHtpV z+ZIA`n6Ni8pVXfk32t_m)fKJV7I&8Q81&Vf?Z;nZya;ValDLB0U6dQ#N}J|^j`ryX z9apGhqoZAYjkhNev&CiNWc>%lNEE}5T{D5cu`yCv#I-GKKhods;v9MrOul%&@{QIj*rPFHPNrcp zT-Ri`*j)!*u59`qo*f+`j99ilDV9B(Ga{qRunP2+>?<=YjR(uzc*5&>3m|*D+gC*x zF$YEW-g+X>i|qQxIqLUuqa9NV9+4K)ya$qbcnhJ!#^V7}dQ)I8!7hOV8ZBa7tHN>l zo9qJ%r&EvqW!+ap4 z3gbKt6by%aK&t=#q?7$(uU!E70&eoqKif+9hYA3_^`JD|!a@cK!xVm!y?(wj!JhC? zmoPlv_hSA=c>1jrbtriNc#k!f)38teG}RHm8dJ2sWJs>r$-QpOl`g28LK`i~&-^=k z70^4`{2E|N$CNkc+2Er3kh4!4BX}erc{rdbZUj7N$Iry^kgN!l5 z-f}1wo94nEPMxz?euXuK((H=4iH?zf0V2^*18H7bdRaOYmJBp+gOj4o*Q8FxV9fR} zm~~sAPtTo%%92KUKXK_s>*jnPGK10*pA1P&W~UVf)m*4QGBsPh^S;ODkW!Gj6O!Dl z%pg}9zj5Wtw_-{KtCSH;)oyszpSkBowP4jRwOoPxIMY9;gWrAELI|o8cCKFGYXRGRLTEXGD zu7>;8#ZyP@fYg`eY>x}-mT}n9*~*&pdhw@=N5_$+nass@3xRx39JH*T^BU72F!V7I z-w@bhVf?UX#n+bKUP>;j4@7QbHZ`-IY@|41|8ShO;Q0-|K3Rx?LBNntHlE!Dz2KK~ zL*N*qtJ6$BTaVClE1T$0+Wz&9>2f9R?lUPefbnj)oK3i!U|zckJYN-U_`LRP+0yJ( zMR)XOQt%B1B#N!|10v1)GlNsXP#U>YCN2HCrN8jCcgz-*JD8UZ4qJVxDh*v!T95mk4Uiy2Hh&ro19Z=f>H65n>q zPEB-x>f<|_1F3Vs$7qSFX=;g!Ae+2eS6dAumCu z+`NXELKJ1oluH)pBtZ43*$sL8Z0^9z@C*5R5(;j(x2QDE(GwkGmW%l!Z_~zO!n-{W zF3?vg(CGb^oFyGb()YvKjgm^-%Yh&53*j<%`}T}irqIVn*jD=o?v=1#-4KkG^q-F3 zje^FWDqep|DCv8rPh=3S%+^EZ;XJRL&}Uk)yN}TNoq#?t9Q##^1U-#h#PHDB4Jxem z>G81?4X9D8kNMowEE=&Ij#>z?D`*u^1wS9-pPm2F7O0`<_GoY73y2Z~TO--j)fd61cGA14kCy6;kE5n*5{ehouR(aOYeDku$P}_)7h`S`x{VcO9=n~ diff --git a/testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.dump.txt b/testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.dump.txt new file mode 100644 index 0000000000..0541a9b4eb --- /dev/null +++ b/testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,612,792] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,792.0000) line(0.0000,0.0000) line(612.0000,0.0000) line(612.0000,792.0000) line(0.0000,792.0000,close)] +SaveState +RestoreState +SaveState +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.png b/testing/resources/embedder_tests/fpdf_annot_render_annot_with_only_rollover_ap.png deleted file mode 100644 index 8f9d480a05d0f6319a52649891a37134927f727c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0y~yU`kv4DDWIP@O}Lzp#lb}1+o%)OnKhl60}XEdfgUZ%)myi+j1({zopr0BS6L7ytkO From c9a34bc1d8b93531cfaa0a0ab3c2c8519d6270bb Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 16 Oct 2026 16:16:56 -0700 Subject: [PATCH 6/9] Make ~CFXJSE_FormCalcContext() clear internal binding of value_ This mirrors what ~CFXJSE_Engine() already did for every other bound object. Also throw an error in V8FunctionCallback_Wrapper should the binding somehow be gone. Bug: 574302978 Change-Id: I9778cc265ab2bcb311842ae3c168bb8c842befc0 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161150 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- fxjs/xfa/cfxjse_class.cpp | 13 ++++++++++--- fxjs/xfa/cfxjse_formcalc_context.cpp | 14 +++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp index c56c2e9628..d8102edf4d 100644 --- a/fxjs/xfa/cfxjse_class.cpp +++ b/fxjs/xfa/cfxjse_class.cpp @@ -45,14 +45,21 @@ FXJSE_CLASS_DESCRIPTOR* AsClassDescriptor(void* ptr) { void V8FunctionCallback_Wrapper( const v8::FunctionCallbackInfo& info) { - const FXJSE_FUNCTION_DESCRIPTOR* pFunctionInfo = + const FXJSE_FUNCTION_DESCRIPTOR* function_info = AsFunctionDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); - if (!pFunctionInfo) { + if (!function_info) { return; } - pFunctionInfo->callbackProc(CFXJSE_HostObject::FromV8(info.This()), info); + // Reject receivers whose binding has been cleared instead of handing a null + // host object to the callback. + CFXJSE_HostObject* host_object = CFXJSE_HostObject::FromV8(info.This()); + if (!host_object) { + FXJSE_ThrowMessage(info.GetIsolate(), "Invalid receiver."); + return; + } + function_info->callbackProc(host_object, info); } void V8ConstructorCallback_Wrapper( diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp index b0684df65c..c9897a837a 100644 --- a/fxjs/xfa/cfxjse_formcalc_context.cpp +++ b/fxjs/xfa/cfxjse_formcalc_context.cpp @@ -36,6 +36,7 @@ #include "fxjs/xfa/cfxjse_class.h" #include "fxjs/xfa/cfxjse_context.h" #include "fxjs/xfa/cfxjse_engine.h" +#include "fxjs/xfa/cfxjse_isolatetracker.h" #include "fxjs/xfa/cjx_object.h" #include "v8/include/v8-container.h" #include "v8/include/v8-function-callback.h" @@ -5120,7 +5121,18 @@ CFXJSE_FormCalcContext::CFXJSE_FormCalcContext(v8::Isolate* pIsolate, ->GetTemplate(isolate_))); } -CFXJSE_FormCalcContext::~CFXJSE_FormCalcContext() = default; +CFXJSE_FormCalcContext::~CFXJSE_FormCalcContext() { + // Clear the binding the same way CFXJSE_Engine does for every other bound + // so later calls on the retained object do not see this binding. + if (!value_.IsEmpty()) { + CFXJSE_ScopeUtil_IsolateHandle scope(GetIsolate()); + v8::Local value = + v8::Local::New(GetIsolate(), value_); + if (value->IsObject()) { + FXJSE_ClearObjectBinding(value.As()); + } + } +} CFXJSE_FormCalcContext* CFXJSE_FormCalcContext::AsFormCalcContext() { return this; From 067393bda2d8be2e9528428baeacc9c97cd49c17 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 16 Oct 2026 16:55:45 -0700 Subject: [PATCH 7/9] Use display list comparisons in FPDFDocEmbedderTest.DeletePageAndRender Compare pre-deletion page display lists with post-deletion page display lists directly instead of rasterizing each page and comparing against bitmap expectations, eliminating 10 obsolete golden PNG files. Change-Id: I664a3d90b24a82efc2b566ec466868598ea206c5 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160356 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- fpdfsdk/fpdf_doc_embeddertest.cpp | 19 +++++++++--------- .../rectangles_multi_pages_1.dump.txt | 8 ++++++++ .../rectangles_multi_pages_1_agg.png | Bin 261 -> 0 bytes .../rectangles_multi_pages_1_skia.png | Bin 285 -> 0 bytes .../rectangles_multi_pages_2.dump.txt | 8 ++++++++ .../rectangles_multi_pages_2_agg.png | Bin 271 -> 0 bytes .../rectangles_multi_pages_2_skia.png | Bin 290 -> 0 bytes .../rectangles_multi_pages_3.dump.txt | 8 ++++++++ .../rectangles_multi_pages_3_agg.png | Bin 261 -> 0 bytes .../rectangles_multi_pages_3_skia.png | Bin 285 -> 0 bytes .../rectangles_multi_pages_4.dump.txt | 8 ++++++++ .../rectangles_multi_pages_4_agg.png | Bin 262 -> 0 bytes .../rectangles_multi_pages_4_skia.png | Bin 285 -> 0 bytes .../rectangles_multi_pages_5.dump.txt | 8 ++++++++ .../rectangles_multi_pages_5_agg.png | Bin 186 -> 0 bytes .../rectangles_multi_pages_5_skia.png | Bin 200 -> 0 bytes 16 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_1.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_1_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_1_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_2_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_3_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_4.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_4_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_4_skia.png create mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_5.dump.txt delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_5_agg.png delete mode 100644 testing/resources/embedder_tests/rectangles_multi_pages_5_skia.png diff --git a/fpdfsdk/fpdf_doc_embeddertest.cpp b/fpdfsdk/fpdf_doc_embeddertest.cpp index aa2ed522a3..2457f5af83 100644 --- a/fpdfsdk/fpdf_doc_embeddertest.cpp +++ b/fpdfsdk/fpdf_doc_embeddertest.cpp @@ -718,7 +718,7 @@ TEST_F(FPDFDocEmbedderTest, DeletePage) { } TEST_F(FPDFDocEmbedderTest, DeletePageAndRender) { - const std::array page_paths = {{ + static constexpr std::array kPagePaths = {{ "rectangles_multi_pages_1", "rectangles_multi_pages_2", "rectangles_multi_pages_3", @@ -732,8 +732,8 @@ TEST_F(FPDFDocEmbedderTest, DeletePageAndRender) { for (int i = 0; i < 5; ++i) { ScopedPage page = LoadScopedPage(i); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), page_paths[i]); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + kPagePaths[i]); } // Delete the first page and render again. (original page indices 1-4) @@ -742,8 +742,8 @@ TEST_F(FPDFDocEmbedderTest, DeletePageAndRender) { for (int i = 0; i < 4; ++i) { ScopedPage page = LoadScopedPage(i); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), page_paths[i + 1]); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + kPagePaths[i + 1]); } // Delete the last page and render again. (original page indices 1-3) @@ -752,8 +752,8 @@ TEST_F(FPDFDocEmbedderTest, DeletePageAndRender) { for (int i = 0; i < 3; ++i) { ScopedPage page = LoadScopedPage(i); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); - CompareBitmapWithExpectationSuffix(bitmap.get(), page_paths[i + 1]); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + kPagePaths[i + 1]); } // Delete the middle page and render again. (original page indices 1, 3) @@ -762,10 +762,9 @@ TEST_F(FPDFDocEmbedderTest, DeletePageAndRender) { for (int i = 0; i < 2; ++i) { ScopedPage page = LoadScopedPage(i); ASSERT_TRUE(page); - ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); int adjusted_index = i == 0 ? 1 : 3; - CompareBitmapWithExpectationSuffix(bitmap.get(), - page_paths[adjusted_index]); + CompareDisplayList(RenderLoadedPageToDisplayList(page.get()), + kPagePaths[adjusted_index]); } } diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_1.dump.txt b/testing/resources/embedder_tests/rectangles_multi_pages_1.dump.txt new file mode 100644 index 0000000000..a602342d9d --- /dev/null +++ b/testing/resources/embedder_tests/rectangles_multi_pages_1.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,200,250] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,250.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,250.0000) line(0.0000,250.0000,close)] +SaveState +DrawPath fill=0xffffff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(100.0000,0.0000) line(130.0000,0.0000) line(130.0000,50.0000) line(100.0000,50.0000) line(100.0000,0.0000,close)] +DrawPath fill=0xffffff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(70.0000,67.0000) line(120.0000,67.0000) line(120.0000,97.0000) line(70.0000,97.0000) line(70.0000,67.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_1_agg.png b/testing/resources/embedder_tests/rectangles_multi_pages_1_agg.png deleted file mode 100644 index 42e3a2a9aa6778217e53936df02c4ac77235efb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D3p0=uJ0i*rq=W)|LR{tL8S3kSsDA(c{r~?n z{Qv(yI<=P(D7((n#WAGf*4rBgIU5WFSRCFuD2j4SOJHmgm3XsX^uN%-430&cdCwH* zufM6aq|re^fP;mJB#M8c#hg^F_BFZl{mjK&4oy181Jhn3v$C)td?w#B8K9AWcsqYC vozySW^~uZjo`X}_MQ1dt-n)L9pJn}&?_BIrLx*gj%Naaf{an^LB{Ts5UBFN} diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_1_skia.png b/testing/resources/embedder_tests/rectangles_multi_pages_1_skia.png deleted file mode 100644 index 9a0c989a7337b83be3f60d06cf37061d1b07db8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D3p0=uJ0i*rq!^2X+?^QKos)S9L}v1W2JiiOf8w)v=~@_PUqcN`;>0 z&M@uv?uTaNX>{b=jnvZx8F3E_k>CNC^e_gt#)u%QMv1GyMNwUthm} z|Nj3#a3eDqD7(Yc#WAGf*4vv0Ih!3sTmw~kk1SzYtFUOLgU-Q!(I=}87%2R)S9oq# zaIOEktnTXbP0l+XkKLO_CS diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_2_skia.png b/testing/resources/embedder_tests/rectangles_multi_pages_2_skia.png deleted file mode 100644 index d61d97f2dde3ac8521999305eb05592b06636672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^zkv7z3p0>3E_k>CNHG=%xjQkeJ16rJ$dL%}32|kx zw`Xv0V5qNWXlP*g|G&PzzM-Mv|NsB}ZMAoSYIb~zBXM~CQ(t?#QJeiGcoZglxT$gTe~DWM4f2Jez; diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_3.dump.txt b/testing/resources/embedder_tests/rectangles_multi_pages_3.dump.txt new file mode 100644 index 0000000000..5ceee94a7c --- /dev/null +++ b/testing/resources/embedder_tests/rectangles_multi_pages_3.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,200,250] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,250.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,250.0000) line(0.0000,250.0000,close)] +SaveState +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(100.0000,0.0000) line(130.0000,0.0000) line(130.0000,50.0000) line(100.0000,50.0000) line(100.0000,0.0000,close)] +DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(70.0000,67.0000) line(120.0000,67.0000) line(120.0000,97.0000) line(70.0000,97.0000) line(70.0000,67.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_3_agg.png b/testing/resources/embedder_tests/rectangles_multi_pages_3_agg.png deleted file mode 100644 index b2d37c9514a72cda94b3019d9facc3d2c0642ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D3p0=uJ0i*rq=W)|LR{q;80vwjzJCAy{r?#l z{{R2~NAvkKpzJzN7srr_TW@b1jRGdLD)<~>uK zzy7Ayl12vw0S*=>k|_R(7IRXy+SlaH_cIrBIW*}U4@`TF%*w)o@R@wiWPnEg;qCmn vbW*=e*C#LAdk#)z7oE|pdhhyaewOu9zH_lh4IQ$9E@$v`^>bP0l+XkK6Z22; diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_3_skia.png b/testing/resources/embedder_tests/rectangles_multi_pages_3_skia.png deleted file mode 100644 index 2655ae10371b7c6778009d02e2848fd3e07f314c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D3p0=uJ0i*rq!^2X+?^QKos)S9 zFgP$U)B{m{eFFnSLqo%V28RFt|8Hf#C=XP#+0(@_q~g}wn;SVB3`AT53)^%SxQcDq zAQp3w_XzKiuWwbGE-ENJ*DE;nA%4}{RxJ(|rbY(^0aB<>A~Vlvb*w3!z3wHqQlY20 zGfca^`=J?m8XY-zBlUDa2HtW1^nFFmlMOzxHy7tA82(<^j%L%o?v^+9%Vl@%-|s7% SzU4g7`3#<}elF{r5}E);<5_tC diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_4.dump.txt b/testing/resources/embedder_tests/rectangles_multi_pages_4.dump.txt new file mode 100644 index 0000000000..217334b3b5 --- /dev/null +++ b/testing/resources/embedder_tests/rectangles_multi_pages_4.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,200,250] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,250.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,250.0000) line(0.0000,250.0000,close)] +SaveState +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(100.0000,0.0000) line(130.0000,0.0000) line(130.0000,50.0000) line(100.0000,50.0000) line(100.0000,0.0000,close)] +DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(100.0000,150.0000) line(150.0000,150.0000) line(150.0000,180.0000) line(100.0000,180.0000) line(100.0000,150.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_4_agg.png b/testing/resources/embedder_tests/rectangles_multi_pages_4_agg.png deleted file mode 100644 index 14a4ad97689f04653b9da76bd324ef009d513ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D3p0=uJ0i*rq=W)|LR=Z-85rsr82&TV*Vpgg zzyJUL|F5t4ft0WJba4!+xb^ndLCyvP0Tze14woCZDNIXXJ@zm9qdwQfBMph$8h_rC zyDckv$x%UogN3Ql0gXDVSXg-~jPK^}k9LQn1UNs}s=-t(DO_^wVC+(>6~$OJA_@K! z>s+b4L*|Lmo9cO=Qxz2pXK*Yzq>z2{)&Tw00#?GBRcg}v3gb0iHm$6f2~yznpR;9 zQxar($@k;2rV~4t6=gbN*9tf9iM_|Wx@WwfA}%fYZoGcNgr74w(Cqoc_|nLHQ@MEm XGAY+L-uov4ozLLu>gTe~DWM4f+7(%X diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_5.dump.txt b/testing/resources/embedder_tests/rectangles_multi_pages_5.dump.txt new file mode 100644 index 0000000000..a477c21e9e --- /dev/null +++ b/testing/resources/embedder_tests/rectangles_multi_pages_5.dump.txt @@ -0,0 +1,8 @@ +SaveState +SetBaseClip [0,0,200,250] +SetClip_PathFill rule=winding matrix=none points=[move(0.0000,250.0000) line(0.0000,0.0000) line(200.0000,0.0000) line(200.0000,250.0000) line(0.0000,250.0000,close)] +SaveState +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(0.0000,90.0000) line(80.0000,90.0000) line(80.0000,150.0000) line(0.0000,150.0000) line(0.0000,90.0000,close)] +DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,250.0000] points=[move(100.0000,150.0000) line(150.0000,150.0000) line(150.0000,180.0000) line(100.0000,180.0000) line(100.0000,150.0000,close)] +RestoreState +RestoreState diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_5_agg.png b/testing/resources/embedder_tests/rectangles_multi_pages_5_agg.png deleted file mode 100644 index 47042bd4802224caa630e755a207256292bbd752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D6El#U+45jDkm3pO32_C|_4W1p_wWDz|Gy`D z+;t#7)6>N9XgaGdT*dKu~1+ zou!%euIn;x0YxUbdcG`qw&eQ6{-Yf#lUo!xnn37;j**q{o+~gNAboWnS}pB5s#z7E RI)Rolc)I$ztaD0e0suR;KOX=9 diff --git a/testing/resources/embedder_tests/rectangles_multi_pages_5_skia.png b/testing/resources/embedder_tests/rectangles_multi_pages_5_skia.png deleted file mode 100644 index 0074f8131a5f0fa5bc1b04078214d5ad919613e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^CxG}D6El#U+45jDkYX$ja(7}_cTVOdki!$;6XFV_ z>+9 Date: Fri, 16 Oct 2026 17:13:47 -0700 Subject: [PATCH 8/9] Fix UNSAFE_TODO() in AlternateDateTimeSymbols() Convert `kAltTableDate` and `kAltTableTime` to std::arrays. Then accessing them is safe because operator[] is hardened to do bounds checking. Change-Id: I0a71c6d7b7f081665bd21306ac5f288085e99c2e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161190 Commit-Queue: Lei Zhang Reviewed-by: Andy Phan --- fxjs/xfa/cfxjse_formcalc_context.cpp | 56 +++++++++++++--------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp index c9897a837a..b0e6a4ec52 100644 --- a/fxjs/xfa/cfxjse_formcalc_context.cpp +++ b/fxjs/xfa/cfxjse_formcalc_context.cpp @@ -303,54 +303,50 @@ const FXJSE_FUNCTION_DESCRIPTOR kFormCalcFunctions[] = { {kFuncTag, "var_filter", CFXJSE_FormCalcContext::fm_var_filter}, }; -const uint8_t kAltTableDate[] = { +constexpr auto kAltTableDate = std::to_array({ 255, 255, 255, 3, 9, 255, 255, 255, 255, 255, 255, 255, 2, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 1, 255, 255, 255, 255, 255, 255, 255, 255, -}; -static_assert(std::size(kAltTableDate) == L'a' - L'A' + 1, - "Invalid kAltTableDate size."); +}); +static_assert(kAltTableDate.size() == L'a' - L'A' + 1); -const uint8_t kAltTableTime[] = { +constexpr auto kAltTableTime = std::to_array({ 14, 255, 255, 3, 9, 255, 255, 15, 255, 255, 255, 255, 6, 255, 255, 255, 255, 255, 7, 255, 255, 255, 255, 255, 1, 17, 255, 255, 255, 255, 255, 255, 255, -}; -static_assert(std::size(kAltTableTime) == L'a' - L'A' + 1, - "Invalid kAltTableTime size."); +}); +static_assert(kAltTableTime.size() == L'a' - L'A' + 1); void AlternateDateTimeSymbols(WideString* pPattern, const WideString& wsAltSymbols, bool bIsDate) { - const uint8_t* pAltTable = bIsDate ? kAltTableDate : kAltTableTime; + const auto& alt_table = bIsDate ? kAltTableDate : kAltTableTime; int32_t nLength = pPattern->GetLength(); bool bInConstRange = false; bool bEscape = false; int32_t i = 0; - UNSAFE_TODO({ - while (i < nLength) { - wchar_t wc = (*pPattern)[i]; - if (wc == L'\'') { - bInConstRange = !bInConstRange; - if (bEscape) { - i++; - } else { - pPattern->Delete(i); - nLength--; - } - bEscape = !bEscape; - continue; + while (i < nLength) { + wchar_t wc = (*pPattern)[i]; + if (wc == L'\'') { + bInConstRange = !bInConstRange; + if (bEscape) { + i++; + } else { + pPattern->Delete(i); + nLength--; } - if (!bInConstRange && wc >= L'A' && wc <= L'a') { - uint8_t nAlt = pAltTable[wc - L'A']; - if (nAlt != 255) { - pPattern->SetAt(i, wsAltSymbols[nAlt]); - } + bEscape = !bEscape; + continue; + } + if (!bInConstRange && wc >= L'A' && wc <= L'a') { + uint8_t nAlt = alt_table[wc - L'A']; + if (nAlt != 255) { + pPattern->SetAt(i, wsAltSymbols[nAlt]); } - i++; - bEscape = false; } - }); + i++; + bEscape = false; + } } std::pair PatternStringType( From 9c866a447ca929bac93ed7da5f957fddb16ccde9 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Fri, 16 Oct 2026 23:35:37 -0700 Subject: [PATCH 9/9] Use float literals in sycc_to_rgb() In core/fxcodec/jpx/cjpx_decoder.cpp, sycc_to_rgb() used unsuffixed double-precision literals (1.402, 0.344, 0.714, 1.772), forcing int32-to-fp64 conversions and 64-bit floating-point arithmetic per pixel across sycc420_to_rgb(), sycc422_to_rgb(), and sycc444_to_rgb(). Use single-precision float literals (1.402f, 0.344f, 0.714f, 1.772f) so compilers use 32-bit float instructions and wider SIMD vectors. Performance (2048x200 sYCC, Coral NPU v3 RVV 256 px): CPU Before After Improvement ------------------------------------------------------------ Google Coral NPU v3 (RVV) 245494c 19952c 12.30x NVIDIA Grace (Neoverse-V2) 499.5 us 310.9 us 1.61x ARM Neoverse-N1 (NEON) 988.4 us 623.5 us 1.59x AmpereOne (NEON) 1006.1 us 631.6 us 1.59x ARM Neoverse-V2 (NEON) 988.0 us 623.5 us 1.58x AMD Zen 3 (AVX2) 313.8 us 226.4 us 1.39x Intel Ivy Bridge (SSE4.2) 722.5 us 519.2 us 1.39x AMD Zen 5 (AVX512) 212.3 us 160.1 us 1.33x AMD Zen 4 (AVX512) 253.8 us 190.5 us 1.33x AMD Zen 2 (AVX2) 416.9 us 330.7 us 1.26x AMD Zen 6 (AVX512) 230.1 us 183.7 us 1.25x ARM Cortex-A53 (NEON) 51602.2 us 41322.9 us 1.25x Intel Haswell (AVX2) 495.7 us 435.5 us 1.14x Intel Ice Lake (AVX512) 361.5 us 339.4 us 1.07x Intel Emerald Rapids 339.7 us 320.3 us 1.06x Intel Sapphire Rapids 253.1 us 240.5 us 1.05x Change-Id: Ia28af085c8c618fde7369f6203cf9b219f60a951 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/161270 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- core/fxcodec/jpx/cjpx_decoder.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/fxcodec/jpx/cjpx_decoder.cpp b/core/fxcodec/jpx/cjpx_decoder.cpp index b61dd5cd30..74dc42d8a1 100644 --- a/core/fxcodec/jpx/cjpx_decoder.cpp +++ b/core/fxcodec/jpx/cjpx_decoder.cpp @@ -97,9 +97,9 @@ void sycc_to_rgb(int offset, int* out_b) { cb -= offset; cr -= offset; - *out_r = std::clamp(y + static_cast(1.402 * cr), 0, upb); - *out_g = std::clamp(y - static_cast(0.344 * cb + 0.714 * cr), 0, upb); - *out_b = std::clamp(y + static_cast(1.772 * cb), 0, upb); + *out_r = std::clamp(y + static_cast(1.402f * cr), 0, upb); + *out_g = std::clamp(y - static_cast(0.344f * cb + 0.714f * cr), 0, upb); + *out_b = std::clamp(y + static_cast(1.772f * cb), 0, upb); } pdfium::span components_span(opj_image_t* img) {