Do not replace existing objects in CPWL_AppStream::SetAsPushButton
An empty string is no assurance of a key not being set.
Bug: chromium:913320
Change-Id: Ia06d0cbe0fa7c2ee662c8fb3d0d537878e80a1ed
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/51451
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index 4b68972..670bda6 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -1100,6 +1100,20 @@
return ByteString(sAppStream);
}
+void SetDefaultIconName(CPDF_Stream* pIcon, const char* name) {
+ if (!pIcon)
+ return;
+
+ CPDF_Dictionary* pImageDict = pIcon->GetDict();
+ if (!pImageDict)
+ return;
+
+ if (pImageDict->KeyExist("Name"))
+ return;
+
+ pImageDict->SetNewFor<CPDF_String>("Name", name, false);
+}
+
} // namespace
CPWL_AppStream::CPWL_AppStream(CPDFSDK_Widget* widget, CPDF_Dictionary* dict)
@@ -1213,29 +1227,11 @@
if (pControl->HasMKEntry("IX"))
pDownIcon = pControl->GetDownIcon();
- if (pNormalIcon) {
- if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) {
- if (pImageDict->GetStringFor("Name").IsEmpty())
- pImageDict->SetNewFor<CPDF_String>("Name", "ImgA", false);
- }
- }
-
- if (pRolloverIcon) {
- if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) {
- if (pImageDict->GetStringFor("Name").IsEmpty())
- pImageDict->SetNewFor<CPDF_String>("Name", "ImgB", false);
- }
- }
-
- if (pDownIcon) {
- if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) {
- if (pImageDict->GetStringFor("Name").IsEmpty())
- pImageDict->SetNewFor<CPDF_String>("Name", "ImgC", false);
- }
- }
+ SetDefaultIconName(pNormalIcon, "ImgA");
+ SetDefaultIconName(pRolloverIcon, "ImgB");
+ SetDefaultIconName(pDownIcon, "ImgC");
CPDF_IconFit iconFit = pControl->GetIconFit();
-
CBA_FontMap font_map(
widget_.Get(),
widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler());