Clean up some dictionary usage in CPDF_GenerateAP::GenerateFormAP()
- Reuse `dr_dict` instead of looking it up again.
- Split `stream_dict` into 2 separate variables with smaller scopes.
- Set /Matrix and /BBox in `stream_dict` once with the second variable
of this name.
- Remove an unreachable early return.
Change-Id: Id018bc68e34a3329f2802017899f3da0200286ca
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/126650
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 609185f..711ea5e 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -1134,11 +1134,10 @@
RetainPtr<CPDF_Dictionary> ap_dict =
annot_dict->GetOrCreateDictFor(pdfium::annotation::kAP);
RetainPtr<CPDF_Stream> normal_stream = ap_dict->GetMutableStreamFor("N");
- RetainPtr<CPDF_Dictionary> stream_dict;
+ RetainPtr<CPDF_Dictionary> resources_dict;
if (normal_stream) {
- stream_dict = normal_stream->GetMutableDict();
- RetainPtr<CPDF_Dictionary> resources_dict =
- stream_dict->GetMutableDictFor("Resources");
+ RetainPtr<CPDF_Dictionary> stream_dict = normal_stream->GetMutableDict();
+ resources_dict = stream_dict->GetMutableDictFor("Resources");
if (resources_dict) {
RetainPtr<CPDF_Dictionary> font_resource_dict =
resources_dict->GetMutableDictFor("Font");
@@ -1154,20 +1153,18 @@
font_dict->GetObjNum());
}
} else {
- stream_dict->SetFor("Resources", form_dict->GetDictFor("DR")->Clone());
+ resources_dict = ToDictionary(dr_dict->Clone());
+ stream_dict->SetFor("Resources", resources_dict);
}
- stream_dict->SetMatrixFor("Matrix", annot_dimensions_and_color.matrix);
- stream_dict->SetRectFor("BBox", annot_dimensions_and_color.bbox);
} else {
normal_stream =
doc->NewIndirect<CPDF_Stream>(pdfium::MakeRetain<CPDF_Dictionary>());
ap_dict->SetNewFor<CPDF_Reference>("N", doc, normal_stream->GetObjNum());
}
- CPVT_FontMap map(
- doc, stream_dict ? stream_dict->GetMutableDictFor("Resources") : nullptr,
- std::move(default_font), font_name);
- CPVT_VariableText::Provider prd(&map);
+ CPVT_FontMap map(doc, std::move(resources_dict), std::move(default_font),
+ font_name);
+ CPVT_VariableText::Provider prd(&map);
switch (type) {
case CPDF_GenerateAP::kTextField: {
RetainPtr<const CPDF_Object> v_field =
@@ -1381,18 +1378,13 @@
}
}
- if (!normal_stream) {
- return;
- }
-
normal_stream->SetDataFromStringstreamAndRemoveFilter(&app_stream);
- stream_dict = normal_stream->GetMutableDict();
+ RetainPtr<CPDF_Dictionary> stream_dict = normal_stream->GetMutableDict();
stream_dict->SetMatrixFor("Matrix", annot_dimensions_and_color.matrix);
stream_dict->SetRectFor("BBox", annot_dimensions_and_color.bbox);
- RetainPtr<CPDF_Dictionary> resources_dict =
- stream_dict->GetMutableDictFor("Resources");
+ resources_dict = stream_dict->GetMutableDictFor("Resources");
if (!resources_dict) {
- stream_dict->SetFor("Resources", form_dict->GetDictFor("DR")->Clone());
+ stream_dict->SetFor("Resources", dr_dict->Clone());
return;
}