summaryrefslogtreecommitdiff
path: root/fpdfsdk/cpdfsdk_pageview.h
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2017-05-16 14:01:47 -0700
committerChromium commit bot <commit-bot@chromium.org>2017-05-16 21:29:40 +0000
commitcc205131b021ebded854958973f445ed121da1b8 (patch)
tree18abcb19e5ec70dc8079cc7ad5192a5ff50aaf27 /fpdfsdk/cpdfsdk_pageview.h
parentd3a3cc24a034654b0825e4822446ddfc6a22c045 (diff)
downloadpdfium-cc205131b021ebded854958973f445ed121da1b8.tar.xz
Introduce CFX_UnownedPtr to detect lifetime inversion issues.
There are places where an object "child" has a raw pointer back to object "owner" with the understanding that owner will always outlive child. Violating this constraint can lead to use after free, but this requires finding two paths: one that frees the objects in the wrong order, and one that uses the object after the free. The purpose of this patch is to detect the constraint violation even when the second path is not hit. We create a template that is used in place of TYPE*. It's dtor, when a memory tool is present, goes out and probes the first byte of the object to which it points. Used in "child", this allows the memory tool to prove that the "owner" is still alive at the time the child is destroyed, and hence the constraint is never violated. Change-Id: I2a6d696d51dda4a79ee2f00a6752965e058a6417 Reviewed-on: https://pdfium-review.googlesource.com/5475 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: dsinclair <dsinclair@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'fpdfsdk/cpdfsdk_pageview.h')
-rw-r--r--fpdfsdk/cpdfsdk_pageview.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/fpdfsdk/cpdfsdk_pageview.h b/fpdfsdk/cpdfsdk_pageview.h
index bcd5177c1a..8bede08a5d 100644
--- a/fpdfsdk/cpdfsdk_pageview.h
+++ b/fpdfsdk/cpdfsdk_pageview.h
@@ -11,6 +11,7 @@
#include <vector>
#include "core/fpdfapi/page/cpdf_page.h"
+#include "core/fxcrt/cfx_unowned_ptr.h"
#include "core/fxcrt/fx_system.h"
#include "fpdfsdk/cpdfsdk_annot.h"
@@ -55,7 +56,10 @@ class CPDFSDK_PageView final : public CPDF_Page::View {
CPDF_Page* GetPDFPage() const;
CPDF_Document* GetPDFDocument();
- CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv; }
+ CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
+ return m_pFormFillEnv.Get();
+ }
+
bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag);
bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag);
#ifdef PDF_ENABLE_XFA
@@ -102,7 +106,7 @@ class CPDFSDK_PageView final : public CPDF_Page::View {
UnderlyingPageType* const m_page;
std::unique_ptr<CPDF_AnnotList> m_pAnnotList;
std::vector<CPDFSDK_Annot*> m_SDKAnnotArray;
- CPDFSDK_FormFillEnvironment* const m_pFormFillEnv; // Not owned.
+ CFX_UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv;
CPDFSDK_Annot::ObservedPtr m_pCaptureWidget;
#ifndef PDF_ENABLE_XFA
bool m_bOwnsPage;