sc/qa/unit/tiledrendering/data/validationcrash.xlsx |binary
 sc/qa/unit/tiledrendering/tiledrendering.cxx        |   18 ++++++++++++++++++
 vcl/jsdialog/jsdialogbuilder.cxx                    |    3 ++-
 3 files changed, 20 insertions(+), 1 deletion(-)

New commits:
commit 17a5fab0c79778bfeaee96549be7f0b6ff705adf
Author:     Dennis Francis <[email protected]>
AuthorDate: Fri Feb 20 22:37:44 2026 +0530
Commit:     Miklos Vajna <[email protected]>
CommitDate: Tue Feb 24 13:01:50 2026 +0100

    lok: do not crash on pre-existing lok-notifier
    
    Bug fixed: Open a spreadsheet in cool with a cell with validation, enter 
invalid
    data ==> core-side crashes:
    
        0x00007f4a16462639 in __assert_fail_base.cold () at /lib64/libc.so.6
        0x00007f4a0fa38830 in vcl::Window::SetLOKNotifier 
(this=this@entry=0x2d4e87d0, pNotifier=pNotifier@entry=0x2cc13888, 
bParent=bParent@entry=false)
        at /var/home/dennis/devel/core/vcl/source/window/window.cxx:3182
        0x00007f4a100f3c7f in JSInstanceBuilder::CreateMessageDialog
            (pParent=<optimized out>, eMessageType=VclMessageType::Info, 
eButtonType=VclButtonsType::OkCancel, rPrimaryMessage="Error: Data type 
mismatch. This field accepts numeric
         values only.", pNotifier=0x2cc13888) at 
/var/home/dennis/devel/core/vcl/jsdialog/jsdialogbuilder.cxx:937
        0x00007f49f4443896 in ScValidationData::DoError 
(this=this@entry=0x7f49d0175fd0, pParent=<optimized out>, rInput="42", 
rPos=..., callback=...)
        at /var/home/dennis/devel/core/sc/source/core/data/validat.cxx:415
        0x00007f49f4783a1a in ScInputHandler::EnterHandler (this=0x2cbb4f70, 
nBlockMode=nBlockMode@entry=ScEnterMode::NORMAL, bBeforeSavingInLOK=false)
        at /var/home/dennis/devel/core/sc/source/ui/app/inputhdl.cxx:3232
        0x00007f49f47a2750 in ScModule::InputEnterHandler
        (this=this@entry=0x2ccbfa80, 
nBlockMode=nBlockMode@entry=ScEnterMode::NORMAL, 
bBeforeSavingInLOK=bBeforeSavingInLOK@entry=false)
        at /var/home/dennis/devel/core/sc/source/ui/app/scmod.cxx:1460
    
    Fix: call SetLOKNotifier() only if it does not already have a
    lok-notifier.
    
    Signed-off-by: Dennis Francis <[email protected]>
    Change-Id: Ic857c3f4fc25302cc6c2c980f9e78a4218d2d471
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199900
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/sc/qa/unit/tiledrendering/data/validationcrash.xlsx 
b/sc/qa/unit/tiledrendering/data/validationcrash.xlsx
new file mode 100644
index 000000000000..bdd815d66742
Binary files /dev/null and 
b/sc/qa/unit/tiledrendering/data/validationcrash.xlsx differ
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx 
b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index 8962205b819a..834fe6e15884 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -3721,6 +3721,24 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, 
testLOKLanguageStatus)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testValidationCellCrash)
+{
+    ScModelObj* pModelObj = createDoc("validationcrash.xlsx");
+    
pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+    CPPUNIT_ASSERT(pModelObj);
+    ScDocShell* pDocSh = dynamic_cast< ScDocShell* >( 
pModelObj->GetEmbeddedObject() );
+    CPPUNIT_ASSERT(pDocSh);
+    ScDocument* pDoc = pModelObj->GetDocument();
+    CPPUNIT_ASSERT(pDoc);
+
+    ScTestViewCallback aView1;
+    SfxViewShell* pView1 = SfxViewShell::Current();
+    ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(pView1);
+    CPPUNIT_ASSERT(pView);
+    typeCharsInCell("42", 0, 1, pView, pModelObj, false /* bInEdit */, true /* 
bCommit */); // Type "42" in A2.
+    // Without the fix this will crash.
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 30c798518f30..830ffa5d8f4e 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -933,7 +933,8 @@ JSInstanceBuilder::CreateMessageDialog(weld::Widget* 
pParent, VclMessageType eMe
     VclPtrInstance<::MessageDialog> xMessageDialog(pParentWidget, 
rPrimaryMessage, eMessageType,
                                                    eButtonType);
 
-    if (pNotifier)
+    // SetLOKNotifier() asserts that xMessageDialog has no LOKNotifier already.
+    if (pNotifier && !xMessageDialog->GetLOKNotifier())
         xMessageDialog->SetLOKNotifier(pNotifier);
 
     pNotifier = xMessageDialog->GetLOKNotifier();

Reply via email to