[Libreoffice-commits] core.git: desktop/qa

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Jan 25 15:58:15 UTC 2019


 desktop/qa/desktop_lib/test_desktop_lib.cxx |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

New commits:
commit b9d5c32b687d2747e7c4fe91b8890942f4548a5c
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Fri Jan 25 14:47:02 2019 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Fri Jan 25 16:57:34 2019 +0100

    CppunitTest_desktop_lib: avoid use-after-free
    
    The LOK callback registers a DesktopLOKTest instance, but depending on
    timing, VCL may invoke that callback after that instance is already
    deleted. The symptom is that all tests run fine, but the testsuite still
    crashes at the end.
    
    This can happen because DeInitVCL() indirectly calls
    Scheduler::ProcessEventsToIdle(), which
    desktop::CallbackFlushHandler::Invoke(), which may or may not invoke the
    (now gone) callback, depending on timing. This typically doesn't happen
    in debug builds, but it happens in release builds.
    
    Change-Id: I00fc07046c46ad602a8b26c022ffcc916d211346
    Reviewed-on: https://gerrit.libreoffice.org/66909
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index c6678704f3e4..331877503775 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -466,6 +466,7 @@ void DesktopLOKTest::testSearchCalc()
     // Result is on the first sheet.
     CPPUNIT_ASSERT_EQUAL(0, m_aSearchResultPart[0]);
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -492,6 +493,7 @@ void DesktopLOKTest::testSearchAllNotificationsCalc()
     // But we do get the selection afterwards.
     CPPUNIT_ASSERT(m_nSelectionAfterSearchResult > 0);
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -843,6 +845,7 @@ void DesktopLOKTest::testCommandResult()
     CPPUNIT_ASSERT_EQUAL(std::string(".uno:Bold"), aTree.get_child("commandName").get_value<std::string>());
     CPPUNIT_ASSERT_EQUAL(true, aTree.get_child("success").get_value<bool>());
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -886,6 +889,7 @@ void DesktopLOKTest::testWriterComments()
     // This was empty, typed characters ended up in the body text.
     CPPUNIT_ASSERT_EQUAL(OUString("test"), xTextField->getPropertyValue("Content").get<OUString>());
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -910,6 +914,7 @@ void DesktopLOKTest::testTrackChanges()
     // This was 1, only the active view was notified.
     CPPUNIT_ASSERT_EQUAL(2, m_nTrackChanges);
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -944,6 +949,7 @@ void DesktopLOKTest::testSheetOperations()
         CPPUNIT_ASSERT_EQUAL(aExpected[i], OString(pDocument->pClass->getPartName(pDocument, i)));
     }
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1057,6 +1063,7 @@ void DesktopLOKTest::testSheetSelections()
         free(pCopiedContent);
     }
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1239,6 +1246,7 @@ void DesktopLOKTest::testContextMenuCalc()
         CPPUNIT_ASSERT_EQUAL(aCheckedToCell.get().data(), std::string("false"));
     }
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1296,6 +1304,7 @@ void DesktopLOKTest::testContextMenuWriter()
         CPPUNIT_ASSERT_EQUAL(aEnabled.get().data(), std::string("true"));
     }
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1424,6 +1433,7 @@ void DesktopLOKTest::testContextMenuImpress()
         CPPUNIT_ASSERT_EQUAL(aCheckedHelpFront.get().data(), std::string("true"));
     }
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1895,6 +1905,7 @@ void DesktopLOKTest::testPaintPartTile()
 
     mxComponent.clear();
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -1937,6 +1948,7 @@ void DesktopLOKTest::testWriterCommentInsertCursor()
     Scheduler::ProcessEventsToIdle();
     mxComponent.clear();
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -2215,6 +2227,7 @@ void DesktopLOKTest::testCommentsCallbacksWriter()
     boost::property_tree::read_json(aStream, aTree);
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), aTree.get_child("comments").size());
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 
@@ -2597,6 +2610,7 @@ void DesktopLOKTest::testTextSelectionHandles()
     CPPUNIT_ASSERT_EQUAL(OString("1418, 1418, 0, 275"), m_aTextSelectionStart);
     CPPUNIT_ASSERT_EQUAL(OString("1898, 1418, 0, 275"), m_aTextSelectionEnd);
 
+    pDocument->pClass->registerCallback(pDocument, nullptr, nullptr);
     comphelper::LibreOfficeKit::setActive(false);
 }
 


More information about the Libreoffice-commits mailing list