Handle failed Realize() in MakeCachedImage()
Checks for a successful Realize() result in MakeCachedImage(), before
trying to construct a CachedImage from it (which would crash if given a
nullptr).
This only affects the Skia code path, as the AGG code path returns the
Realize() result directly.
No test added because triggering Realize() failure requires hard-to-test
conditions like running out of memory.
Fixed: chromium:1467034
Change-Id: I0d089035cf5a83f8fbf87b55c2e6edf5394e7ee5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/110190
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: K. Moon <kmoon@chromium.org>
Auto-Submit: K. Moon <kmoon@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_pageimagecache.cpp b/core/fpdfapi/page/cpdf_pageimagecache.cpp
index e470169..cebb8b1 100644
--- a/core/fpdfapi/page/cpdf_pageimagecache.cpp
+++ b/core/fpdfapi/page/cpdf_pageimagecache.cpp
@@ -113,8 +113,13 @@
// TODO(crbug.com/pdfium/2050): Ignore `realize_hint`, as `RealizeSkImage()`
// doesn't benefit from it. The current behavior masks a bug in `CPDF_DIB`
// in which `GetBuffer()` and `GetScanline()` don't give the same answer.
- return pdfium::MakeRetain<CachedImage>(realize_hint ? image->Realize()
- : std::move(image));
+ if (realize_hint) {
+ image = image->Realize();
+ if (!image) {
+ return nullptr;
+ }
+ }
+ return pdfium::MakeRetain<CachedImage>(std::move(image));
}
#endif // defined(_SKIA_SUPPORT_)
return realize_hint ? image->Realize() : image;