[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - vcl/jsdialog

Henry Castro (via logerrit) logerrit at kemper.freedesktop.org
Mon Jan 18 20:44:32 UTC 2021


 vcl/jsdialog/jsdialogbuilder.cxx |   38 ++++++++++++++++++++------------------
 1 file changed, 20 insertions(+), 18 deletions(-)

New commits:
commit 668fe5ba93a80f3949d0747917f74292a2606215
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Fri Dec 4 17:00:51 2020 -0400
Commit:     Henry Castro <hcastro at collabora.com>
CommitDate: Mon Jan 18 21:43:57 2021 +0100

    lok: jsdialog: fix possible nullptr dereference
    
    p = nullptr;
    
    if (p)
    {
    }
    
    p->Somenthing();
    
    Change-Id: I2a46d6a8e7eae96928210c8941ec71eed88bf631
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107245
    Tested-by: Jenkins
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109136
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>

diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 649893bb6832..49cbac450087 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -375,35 +375,37 @@ VclPtr<vcl::Window>& JSInstanceBuilder::GetNotifierWindow()
 
 std::unique_ptr<weld::Dialog> JSInstanceBuilder::weld_dialog(const OString& id, bool bTakeOwnership)
 {
+    std::unique_ptr<weld::Dialog> pRet;
     ::Dialog* pDialog = m_xBuilder->get<::Dialog>(id);
-    m_nWindowId = pDialog->GetLOKWindowId();
-    pDialog->SetLOKTunnelingState(false);
-
-    InsertWindowToMap(m_nWindowId);
 
     if (bTakeOwnership && pDialog)
     {
+        m_nWindowId = pDialog->GetLOKWindowId();
+        pDialog->SetLOKTunnelingState(false);
+
+        InsertWindowToMap(m_nWindowId);
+
         assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed");
         m_aOwnedToplevel.set(pDialog);
         m_xBuilder->drop_ownership(pDialog);
         m_bHasTopLevelDialog = true;
-    }
 
-    std::unique_ptr<weld::Dialog> pRet(pDialog ? new JSDialog(m_aOwnedToplevel, m_aOwnedToplevel,
-                                                              pDialog, this, false, m_sTypeOfJSON)
-                                               : nullptr);
+        pRet.reset(pDialog ? new JSDialog(m_aOwnedToplevel, m_aOwnedToplevel, pDialog, this, false,
+                                          m_sTypeOfJSON)
+                           : nullptr);
 
-    RememberWidget("__DIALOG__", pRet.get());
+        RememberWidget("__DIALOG__", pRet.get());
 
-    const vcl::ILibreOfficeKitNotifier* pNotifier = pDialog->GetLOKNotifier();
-    if (pNotifier && id != "MacroSelectorDialog")
-    {
-        std::stringstream aStream;
-        boost::property_tree::ptree aTree = m_aOwnedToplevel->DumpAsPropertyTree();
-        aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
-        boost::property_tree::write_json(aStream, aTree);
-        const std::string message = aStream.str();
-        pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
+        const vcl::ILibreOfficeKitNotifier* pNotifier = pDialog->GetLOKNotifier();
+        if (pNotifier && id != "MacroSelectorDialog")
+        {
+            std::stringstream aStream;
+            boost::property_tree::ptree aTree = m_aOwnedToplevel->DumpAsPropertyTree();
+            aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
+            boost::property_tree::write_json(aStream, aTree);
+            const std::string message = aStream.str();
+            pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
+        }
     }
 
     return pRet;


More information about the Libreoffice-commits mailing list