From dc359b03ab6a70ee52a91119ff6704cae92f4809 Mon Sep 17 00:00:00 2001 From: thestig Date: Tue, 9 Aug 2016 15:46:20 -0700 Subject: Fix a leak with FPDFPageObj_NewImgeObj(). BUG=pdfium:545 Review-Url: https://codereview.chromium.org/2194393002 --- fpdfsdk/fpdfeditimg.cpp | 2 +- fpdfsdk/fpdfeditimg_unittest.cpp | 52 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 fpdfsdk/fpdfeditimg_unittest.cpp (limited to 'fpdfsdk') diff --git a/fpdfsdk/fpdfeditimg.cpp b/fpdfsdk/fpdfeditimg.cpp index cd28301977..da3d33eb05 100644 --- a/fpdfsdk/fpdfeditimg.cpp +++ b/fpdfsdk/fpdfeditimg.cpp @@ -19,7 +19,7 @@ FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) { return nullptr; CPDF_ImageObject* pImageObj = new CPDF_ImageObject; - pImageObj->m_pImage = new CPDF_Image(pDoc); + pImageObj->SetOwnedImage(WrapUnique(new CPDF_Image(pDoc))); return pImageObj; } diff --git a/fpdfsdk/fpdfeditimg_unittest.cpp b/fpdfsdk/fpdfeditimg_unittest.cpp new file mode 100644 index 0000000000..abe0ffe25c --- /dev/null +++ b/fpdfsdk/fpdfeditimg_unittest.cpp @@ -0,0 +1,52 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "public/fpdf_edit.h" + +#include "core/fpdfapi/include/cpdf_modulemgr.h" +#include "testing/gtest/include/gtest/gtest.h" + +class PDFEditTest : public testing::Test { + void SetUp() override { + CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get(); + module_mgr->InitPageModule(); + } + + void TearDown() override { CPDF_ModuleMgr::Destroy(); } +}; + +TEST_F(PDFEditTest, InsertObjectWithInvalidPage) { + FPDF_DOCUMENT doc = FPDF_CreateNewDocument(); + FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100); + EXPECT_EQ(0, FPDFPage_CountObject(page)); + + FPDFPage_InsertObject(nullptr, nullptr); + EXPECT_EQ(0, FPDFPage_CountObject(page)); + + FPDFPage_InsertObject(page, nullptr); + EXPECT_EQ(0, FPDFPage_CountObject(page)); + + FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImgeObj(doc); + FPDFPage_InsertObject(nullptr, page_image); + EXPECT_EQ(0, FPDFPage_CountObject(page)); + + FPDF_ClosePage(page); + FPDF_CloseDocument(doc); +} + +// https://bugs.chromium.org/p/pdfium/issues/detail?id=545 +// TODO(thestig): Add another test case that also calls +// FPDFPage_GenerateContent(). +TEST_F(PDFEditTest, NewImgeObj) { + FPDF_DOCUMENT doc = FPDF_CreateNewDocument(); + FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100); + EXPECT_EQ(0, FPDFPage_CountObject(page)); + + FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImgeObj(doc); + FPDFPage_InsertObject(page, page_image); + EXPECT_EQ(1, FPDFPage_CountObject(page)); + + FPDF_ClosePage(page); + FPDF_CloseDocument(doc); +} -- cgit v1.2.3