xmlsecurity/inc/certificatechooser.hxx                     |   12 +++---
 xmlsecurity/source/component/documentdigitalsignatures.cxx |   14 +++----
 xmlsecurity/source/dialogs/certificatechooser.cxx          |   26 ++++++-------
 xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx     |    2 -
 4 files changed, 27 insertions(+), 27 deletions(-)

New commits:
commit ce8d6b6836744045264eda41bcfdc4571c8b1b26
Author:     Patrick Luby <guibmac...@gmail.com>
AuthorDate: Mon Mar 4 19:15:00 2024 -0500
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Mar 5 18:35:14 2024 +0100

    Related: tdf#152524 eliminate UserData struct name collision
    
    The cui module has its own UserData struct and when building with
    --enable-mergelibs=more, this data collision will cause a crash
    when deleting a UserData instance in the xmlsecurity module because
    the cui module already has its own, unrelated UserData struct.
    
    Change-Id: I6418b049c72a2e902c9b5076b72fd240f65a593d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164404
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/xmlsecurity/inc/certificatechooser.hxx 
b/xmlsecurity/inc/certificatechooser.hxx
index b0cf7c7cdcc4..ef81678ffcc0 100644
--- a/xmlsecurity/inc/certificatechooser.hxx
+++ b/xmlsecurity/inc/certificatechooser.hxx
@@ -34,14 +34,14 @@ namespace com::sun::star {
 
 namespace com::sun::star::xml::crypto { class XXMLSecurityContext; }
 
-struct UserData
+struct CertificateChooserUserData
 {
     css::uno::Reference<css::security::XCertificate> xCertificate;
     css::uno::Reference<css::xml::crypto::XXMLSecurityContext> 
xSecurityContext;
     css::uno::Reference<css::xml::crypto::XSecurityEnvironment> 
xSecurityEnvironment;
 };
 
-enum class UserAction
+enum class CertificateChooserUserAction
 {
     Sign,
     SelectSign, // Select signing certificate
@@ -52,10 +52,10 @@ class CertificateChooser final : public 
weld::GenericDialogController
 {
 private:
     std::vector< css::uno::Reference< css::xml::crypto::XXMLSecurityContext > 
> mxSecurityContexts;
-    std::vector<std::shared_ptr<UserData>> mvUserData;
+    std::vector<std::shared_ptr<CertificateChooserUserData>> mvUserData;
 
     bool                    mbInitialized;
-    UserAction const        meAction;
+    CertificateChooserUserAction const meAction;
     OUString                msPreferredKey;
     css::uno::Reference<css::security::XCertificate> mxEncryptToSelf;
 
@@ -86,12 +86,12 @@ private:
 public:
     CertificateChooser(weld::Window* pParent,
                        std::vector< css::uno::Reference< 
css::xml::crypto::XXMLSecurityContext > > && rxSecurityContexts,
-                       UserAction eAction);
+                       CertificateChooserUserAction eAction);
     virtual ~CertificateChooser() override;
 
     static std::unique_ptr<CertificateChooser> getInstance(weld::Window* 
_pParent,
                         std::vector< css::uno::Reference< 
css::xml::crypto::XXMLSecurityContext > > && rxSecurityContexts,
-                        UserAction eAction) {
+                        CertificateChooserUserAction eAction) {
         // Don't reuse CertificateChooser instances
         // Reusing the same instance will, in the following case, lead to a
         // crash. It appears that the CertificateChooser is getting disposed
diff --git a/xmlsecurity/source/component/documentdigitalsignatures.cxx 
b/xmlsecurity/source/component/documentdigitalsignatures.cxx
index c1768c0e953a..a06fcc81d128 100644
--- a/xmlsecurity/source/component/documentdigitalsignatures.cxx
+++ b/xmlsecurity/source/component/documentdigitalsignatures.cxx
@@ -103,7 +103,7 @@ private:
                          DocumentSignatureMode eMode);
 
     css::uno::Sequence<css::uno::Reference<css::security::XCertificate>>
-    chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, const 
UserAction eAction,
+    chooseCertificatesImpl(std::map<OUString, OUString>& rProperties, const 
CertificateChooserUserAction eAction,
                            const CertificateKind 
certificateKind=CertificateKind_NONE);
 
     bool
@@ -696,7 +696,7 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted(
 
 uno::Sequence<Reference<css::security::XCertificate>>
 DocumentDigitalSignatures::chooseCertificatesImpl(std::map<OUString, 
OUString>& rProperties,
-                                                  const UserAction eAction,
+                                                  const 
CertificateChooserUserAction eAction,
                                                   const CertificateKind 
certificateKind)
 {
     std::vector< Reference< css::xml::crypto::XXMLSecurityContext > > 
xSecContexts;
@@ -729,7 +729,7 @@ Reference< css::security::XCertificate > 
DocumentDigitalSignatures::chooseCertif
 Reference< css::security::XCertificate > 
DocumentDigitalSignatures::chooseSigningCertificate(OUString& rDescription)
 {
     std::map<OUString, OUString> aProperties;
-    Reference< css::security::XCertificate > xCert = chooseCertificatesImpl( 
aProperties, UserAction::Sign )[0];
+    Reference< css::security::XCertificate > xCert = chooseCertificatesImpl( 
aProperties, CertificateChooserUserAction::Sign )[0];
     rDescription = aProperties["Description"];
     return xCert;
 }
@@ -737,7 +737,7 @@ Reference< css::security::XCertificate > 
DocumentDigitalSignatures::chooseSignin
 Reference< css::security::XCertificate > 
DocumentDigitalSignatures::selectSigningCertificate(OUString& rDescription)
 {
     std::map<OUString, OUString> aProperties;
-    Reference< css::security::XCertificate > xCert = chooseCertificatesImpl( 
aProperties, UserAction::SelectSign )[0];
+    Reference< css::security::XCertificate > xCert = chooseCertificatesImpl( 
aProperties, CertificateChooserUserAction::SelectSign )[0];
     rDescription = aProperties["Description"];
     return xCert;
 }
@@ -748,7 +748,7 @@ 
DocumentDigitalSignatures::selectSigningCertificateWithType(const CertificateKin
 {
     std::map<OUString, OUString> aProperties;
     Reference<css::security::XCertificate> xCert
-        = chooseCertificatesImpl(aProperties, UserAction::SelectSign, 
certificateKind)[0];
+        = chooseCertificatesImpl(aProperties, 
CertificateChooserUserAction::SelectSign, certificateKind)[0];
     rDescription = aProperties["Description"];
     return xCert;
 }
@@ -757,7 +757,7 @@ css::uno::Sequence< Reference< css::security::XCertificate 
> > DocumentDigitalSi
 {
     std::map<OUString, OUString> aProperties;
     uno::Sequence< Reference< css::security::XCertificate > > aCerts=
-        chooseCertificatesImpl( aProperties, UserAction::Encrypt );
+        chooseCertificatesImpl( aProperties, 
CertificateChooserUserAction::Encrypt );
     if (aCerts.getLength() == 1 && !aCerts[0].is())
         // our error case contract is: empty sequence, so map that!
         return uno::Sequence< Reference< css::security::XCertificate > >();
@@ -768,7 +768,7 @@ css::uno::Sequence< Reference< css::security::XCertificate 
> > DocumentDigitalSi
 css::uno::Reference< css::security::XCertificate > 
DocumentDigitalSignatures::chooseCertificateWithProps(Sequence<::com::sun::star::beans::PropertyValue>&
 rProperties)
 {
     std::map<OUString, OUString> aProperties;
-    auto xCert = chooseCertificatesImpl( aProperties, UserAction::Sign )[0];
+    auto xCert = chooseCertificatesImpl( aProperties, 
CertificateChooserUserAction::Sign )[0];
 
     std::vector<css::beans::PropertyValue> vec;
     vec.reserve(aProperties.size());
diff --git a/xmlsecurity/source/dialogs/certificatechooser.cxx 
b/xmlsecurity/source/dialogs/certificatechooser.cxx
index faea635f1be9..e381b38f2933 100644
--- a/xmlsecurity/source/dialogs/certificatechooser.cxx
+++ b/xmlsecurity/source/dialogs/certificatechooser.cxx
@@ -41,7 +41,7 @@ using namespace css;
 
 CertificateChooser::CertificateChooser(weld::Window* _pParent,
                                        std::vector< css::uno::Reference< 
css::xml::crypto::XXMLSecurityContext > > && rxSecurityContexts,
-                                       UserAction eAction)
+                                       CertificateChooserUserAction eAction)
     : GenericDialogController(_pParent, 
"xmlsec/ui/selectcertificatedialog.ui", "SelectCertificateDialog")
     , meAction(eAction)
     , m_xFTSign(m_xBuilder->weld_label("sign"))
@@ -146,19 +146,19 @@ void CertificateChooser::ImplInitialize(bool mbSearch)
 
     switch (meAction)
     {
-        case UserAction::Sign:
+        case CertificateChooserUserAction::Sign:
             m_xFTSign->show();
             m_xOKBtn->set_label(XsResId(STR_SIGN));
             msPreferredKey = aUserOpts.GetSigningKey();
             break;
 
-        case UserAction::SelectSign:
+        case CertificateChooserUserAction::SelectSign:
             m_xFTSign->show();
             m_xOKBtn->set_label(XsResId(STR_SELECTSIGN));
             msPreferredKey = aUserOpts.GetSigningKey();
             break;
 
-        case UserAction::Encrypt:
+        case CertificateChooserUserAction::Encrypt:
             m_xFTEncrypt->show();
             m_xFTDescription->hide();
             m_xDescriptionED->hide();
@@ -187,7 +187,7 @@ void CertificateChooser::ImplInitialize(bool mbSearch)
             }
             else
             {
-                if (meAction == UserAction::Sign || meAction == 
UserAction::SelectSign)
+                if (meAction == CertificateChooserUserAction::Sign || meAction 
== CertificateChooserUserAction::SelectSign)
                     xCerts = secEnvironment->getPersonalCertificates();
                 else
                     xCerts = secEnvironment->getAllCertificates();
@@ -213,7 +213,7 @@ void CertificateChooser::ImplInitialize(bool mbSearch)
         // fill list of certificates; the first entry will be selected
         for (const auto& xCert : xCerts)
         {
-            std::shared_ptr<UserData> userData = std::make_shared<UserData>();
+            std::shared_ptr<CertificateChooserUserData> userData = 
std::make_shared<CertificateChooserUserData>();
             userData->xCertificate = xCert;
             userData->xSecurityContext = secContext;
             userData->xSecurityEnvironment = secEnvironment;
@@ -242,11 +242,11 @@ void CertificateChooser::ImplInitialize(bool mbSearch)
             if ( !sIssuer.isEmpty() && !msPreferredKey.isEmpty() ) {
                 if ( sIssuer == msPreferredKey )
                 {
-                    if ( meAction == UserAction::Sign || meAction == 
UserAction::SelectSign )
+                    if ( meAction == CertificateChooserUserAction::Sign || 
meAction == CertificateChooserUserAction::SelectSign )
                     {
                         oSelectRow.emplace(nRow);
                     }
-                    else if ( meAction == UserAction::Encrypt &&
+                    else if ( meAction == 
CertificateChooserUserAction::Encrypt &&
                               aUserOpts.GetEncryptToSelf() )
                         mxEncryptToSelf = xCert;
                 }
@@ -271,11 +271,11 @@ void CertificateChooser::ImplInitialize(bool mbSearch)
 uno::Sequence<uno::Reference< css::security::XCertificate > > 
CertificateChooser::GetSelectedCertificates()
 {
     std::vector< uno::Reference< css::security::XCertificate > > aRet;
-    if (meAction == UserAction::Encrypt)
+    if (meAction == CertificateChooserUserAction::Encrypt)
     {
         // for encryption, multiselection is enabled
         m_xCertLB->selected_foreach([this, &aRet](weld::TreeIter& rEntry){
-            UserData* userData = 
weld::fromId<UserData*>(m_xCertLB->get_id(rEntry));
+            CertificateChooserUserData* userData = 
weld::fromId<CertificateChooserUserData*>(m_xCertLB->get_id(rEntry));
             aRet.push_back( userData->xCertificate );
             return false;
         });
@@ -286,7 +286,7 @@ uno::Sequence<uno::Reference< css::security::XCertificate > 
> CertificateChooser
         int nSel = m_xCertLB->get_selected_index();
         if (nSel != -1)
         {
-            UserData* userData = 
weld::fromId<UserData*>(m_xCertLB->get_id(nSel));
+            CertificateChooserUserData* userData = 
weld::fromId<CertificateChooserUserData*>(m_xCertLB->get_id(nSel));
             xCert = userData->xCertificate;
         }
         aRet.push_back( xCert );
@@ -306,7 +306,7 @@ uno::Reference<xml::crypto::XXMLSecurityContext> 
CertificateChooser::GetSelected
     if (nSel == -1)
         return uno::Reference<xml::crypto::XXMLSecurityContext>();
 
-    UserData* userData = weld::fromId<UserData*>(m_xCertLB->get_id(nSel));
+    CertificateChooserUserData* userData = 
weld::fromId<CertificateChooserUserData*>(m_xCertLB->get_id(nSel));
     uno::Reference<xml::crypto::XXMLSecurityContext> xCert = 
userData->xSecurityContext;
     return xCert;
 }
@@ -366,7 +366,7 @@ void CertificateChooser::ImplShowCertificateDetails()
     if (nSel == -1)
         return;
 
-    UserData* userData = weld::fromId<UserData*>(m_xCertLB->get_id(nSel));
+    CertificateChooserUserData* userData = 
weld::fromId<CertificateChooserUserData*>(m_xCertLB->get_id(nSel));
 
     if (!userData->xSecurityEnvironment.is() || !userData->xCertificate.is())
         return;
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx 
b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index 8349a58a31ce..ba16a3618e7f 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -509,7 +509,7 @@ IMPL_LINK_NOARG(DigitalSignaturesDialog, AddButtonHdl, 
weld::Button&, void)
         if 
(DocumentSignatureHelper::CanSignWithGPG(maSignatureManager.getStore(), 
m_sODFVersion))
             xSecContexts.push_back(maSignatureManager.getGpgSecurityContext());
 
-        std::unique_ptr<CertificateChooser> aChooser = 
CertificateChooser::getInstance(m_xDialog.get(), std::move(xSecContexts), 
UserAction::Sign);
+        std::unique_ptr<CertificateChooser> aChooser = 
CertificateChooser::getInstance(m_xDialog.get(), std::move(xSecContexts), 
CertificateChooserUserAction::Sign);
         if (aChooser->run() == RET_OK)
         {
             sal_Int32 nSecurityId;

Reply via email to