Realize objects created with FPDF_NewFormObjectFromXObject(). Currently, when FPDF_NewFormObjectFromXObject() creates an object, that object does not work as intended when inserted into a document. It does not render and has 0x0 bounds. Fix this issue by adding a missing CPDF_Form::ParseContent() call. Bug: pdfium:1905 Change-Id: I34d0bacbb586dfab0d41c077b49bc8b3f04a927d Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99633 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp index a8df848..d29857a 100644 --- a/fpdfsdk/fpdf_ppo.cpp +++ b/fpdfsdk/fpdf_ppo.cpp
@@ -815,6 +815,7 @@ constexpr int kNoContentStream = CPDF_PageObject::kNoContentStream; auto form = std::make_unique<CPDF_Form>(xobj->dest_doc, nullptr, xobj->xobject, nullptr); + form->ParseContent(nullptr, nullptr, nullptr); auto form_object = std::make_unique<CPDF_FormObject>( kNoContentStream, std::move(form), CFX_Matrix()); return FPDFPageObjectFromCPDFPageObject(form_object.release());
diff --git a/fpdfsdk/fpdf_ppo_embeddertest.cpp b/fpdfsdk/fpdf_ppo_embeddertest.cpp index 5afcefe..1beae05 100644 --- a/fpdfsdk/fpdf_ppo_embeddertest.cpp +++ b/fpdfsdk/fpdf_ppo_embeddertest.cpp
@@ -194,22 +194,19 @@ FPDFPage_InsertObject(page.get(), page_object); EXPECT_TRUE(FPDFPage_GenerateContent(page.get())); - // TODO(thestig): This should have `checksum`. ScopedFPDFBitmap page_bitmap = RenderPage(page.get()); - CompareBitmap(page_bitmap.get(), 612, 792, - pdfium::kBlankPage612By792Checksum); + CompareBitmap(page_bitmap.get(), 612, 792, checksum); - // TODO(crbug.com/pdfium/1905): These should have non-zero values. float left; float bottom; float right; float top; ASSERT_TRUE( FPDFPageObj_GetBounds(page_object, &left, &bottom, &right, &top)); - EXPECT_FLOAT_EQ(0.0f, left); - EXPECT_FLOAT_EQ(0.0f, bottom); - EXPECT_FLOAT_EQ(0.0f, right); - EXPECT_FLOAT_EQ(0.0f, top); + EXPECT_FLOAT_EQ(-1.0f, left); + EXPECT_FLOAT_EQ(-1.0f, bottom); + EXPECT_FLOAT_EQ(201.0f, right); + EXPECT_FLOAT_EQ(301.0f, top); } EXPECT_TRUE(FPDF_SaveAsCopy(output_doc.get(), this, 0)); @@ -301,9 +298,8 @@ EXPECT_TRUE(FPDFPage_GenerateContent(page)); { - // TODO(thestig): This should have `checksum`. ScopedFPDFBitmap bitmap = RenderLoadedPage(page); - CompareBitmap(bitmap.get(), 200, 300, pdfium::RectanglesChecksum()); + CompareBitmap(bitmap.get(), 200, 300, checksum); } FPDF_CloseXObject(xobject);