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