From e7f4d334eff7d396ec0043a97f751483f8cc9e75 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 3 May 2018 20:27:05 +0000 Subject: Prove that the memory was good at FPDFBitmap_CreateEx() create time. Diagnostic for the associated bug, not a bugfix. Helps rule out one possible scenario. Bug: chromium:838886 Change-Id: Ia56fda779407daf8e52a8b754800154fd7491ae7 Reviewed-on: https://pdfium-review.googlesource.com/32055 Reviewed-by: dsinclair Commit-Queue: Tom Sepez --- fpdfsdk/fpdf_view.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index a31118ff10..f4a761000b 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -27,6 +27,7 @@ #include "core/fpdfdoc/cpdf_viewerpreferences.h" #include "core/fxcrt/fx_stream.h" #include "core/fxcrt/fx_system.h" +#include "core/fxcrt/unowned_ptr.h" #include "core/fxge/cfx_defaultrenderdevice.h" #include "core/fxge/cfx_gemodule.h" #include "core/fxge/cfx_renderdevice.h" @@ -854,11 +855,13 @@ FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_CreateEx(int width, default: return nullptr; } + + // Ensure external memory is good at least for the duration of this call. + UnownedPtr pChecker(static_cast(first_scan)); auto pBitmap = pdfium::MakeRetain(); - if (!pBitmap->Create(width, height, fx_format, - static_cast(first_scan), stride)) { + if (!pBitmap->Create(width, height, fx_format, pChecker.Get(), stride)) return nullptr; - } + return FPDFBitmapFromCFXDIBitmap(pBitmap.Leak()); } -- cgit v1.2.3