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