Add ScopedFPDFClipPath. Scoper to call FPDF_DestroyClipPath() for a FPDF_CLIPPATH. Change-Id: I9781e14fcbb29087b340b2ecb0785b7bf41583c1 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/54770 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_transformpage_embeddertest.cpp b/fpdfsdk/fpdf_transformpage_embeddertest.cpp index bb9b620..212649c 100644 --- a/fpdfsdk/fpdf_transformpage_embeddertest.cpp +++ b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
@@ -341,18 +341,19 @@ FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); - FPDF_CLIPPATH clip = FPDF_CreateClipPath(10.0f, 10.0f, 90.0f, 90.0f); - EXPECT_TRUE(clip); + { + ScopedFPDFClipPath clip(FPDF_CreateClipPath(10.0f, 10.0f, 90.0f, 90.0f)); + EXPECT_TRUE(clip); - // NULL arg call is a no-op. - FPDFPage_InsertClipPath(nullptr, clip); + // NULL arg call is a no-op. + FPDFPage_InsertClipPath(nullptr, clip.get()); - // Do actual work. - FPDFPage_InsertClipPath(page, clip); + // Do actual work. + FPDFPage_InsertClipPath(page, clip.get()); - // TODO(tsepez): test how inserting path affects page rendering. + // TODO(tsepez): test how inserting path affects page rendering. + } - FPDF_DestroyClipPath(clip); UnloadPage(page); }
diff --git a/public/cpp/fpdf_deleters.h b/public/cpp/fpdf_deleters.h index 5cc0fb6..9a700e3 100644 --- a/public/cpp/fpdf_deleters.h +++ b/public/cpp/fpdf_deleters.h
@@ -11,6 +11,7 @@ #include "public/fpdf_formfill.h" #include "public/fpdf_structtree.h" #include "public/fpdf_text.h" +#include "public/fpdf_transformpage.h" #include "public/fpdfview.h" // Custom deleters for using FPDF_* types with std::unique_ptr<>. @@ -27,6 +28,12 @@ inline void operator()(FPDF_BITMAP bitmap) { FPDFBitmap_Destroy(bitmap); } }; +struct FPDFClipPathDeleter { + inline void operator()(FPDF_CLIPPATH clip_path) { + FPDF_DestroyClipPath(clip_path); + } +}; + struct FPDFDocumentDeleter { inline void operator()(FPDF_DOCUMENT doc) { FPDF_CloseDocument(doc); } };
diff --git a/public/cpp/fpdf_scopers.h b/public/cpp/fpdf_scopers.h index 7d9cbc0..ebae107 100644 --- a/public/cpp/fpdf_scopers.h +++ b/public/cpp/fpdf_scopers.h
@@ -29,6 +29,10 @@ using ScopedFPDFBitmap = std::unique_ptr<std::remove_pointer<FPDF_BITMAP>::type, FPDFBitmapDeleter>; +using ScopedFPDFClipPath = + std::unique_ptr<std::remove_pointer<FPDF_CLIPPATH>::type, + FPDFClipPathDeleter>; + using ScopedFPDFDocument = std::unique_ptr<std::remove_pointer<FPDF_DOCUMENT>::type, FPDFDocumentDeleter>;