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>;