[Libreoffice-commits] core.git: vcl/source

Stephan Bergmann sbergman at redhat.com
Mon Jun 12 14:46:52 UTC 2017


 vcl/source/uitest/uno/uiobject_uno.cxx |   26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

New commits:
commit 12e322e2732bdb904eac1615f96ad9318450cb59
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 12 16:45:45 2017 +0200

    Avoid use-after-free
    
    ...as seen in UITest_calc_demo:
    
    > ==1010== Invalid read of size 4
    > ==1010==    at 0x58DA550: __pthread_mutex_unlock_usercnt (/usr/src/debug/glibc-2.24-33-ge9e69e4/nptl/pthread_mutex_unlock.c:39)
    > ==1010==    by 0x58DA550: pthread_mutex_unlock (/usr/src/debug/glibc-2.24-33-ge9e69e4/nptl/pthread_mutex_unlock.c:324)
    > ==1010==    by 0x1085FB42: __gthread_mutex_unlock(pthread_mutex_t*) (/usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/x86_64-redhat-linux/bits/gthr-default.h:778)
    > ==1010==    by 0x10861414: std::mutex::unlock() (/usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/std_mutex.h:121)
    > ==1010==    by 0x10861901: std::unique_lock<std::mutex>::unlock() (/usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/std_mutex.h:323)
    > ==1010==    by 0x108604C6: std::unique_lock<std::mutex>::~unique_lock() (/usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/std_mutex.h:232)
    > ==1010==    by 0x1085FA5E: (anonymous namespace)::ExecuteWrapper::ExecuteActionHdl(Timer*) (/vcl/source/uitest/uno/uiobject_uno.cxx:103)
    > ==1010==    by 0x1085EDE7: (anonymous namespace)::ExecuteWrapper::LinkStubExecuteActionHdl(void*, Timer*) (/vcl/source/uitest/uno/uiobject_uno.cxx:85)
    > ==1010==    by 0x10715647: Link<Timer*, void>::Call(Timer*) const (/include/tools/link.hxx:84)
    > ==1010==    by 0x107154A6: Timer::Invoke() (/vcl/source/app/timer.cxx:89)
    > ==1010==    by 0x106D3841: ImplSchedulerData::Invoke() (/vcl/source/app/scheduler.cxx:46)
    > ==1010==    by 0x106D3D28: Scheduler::ProcessTaskScheduling(bool) (/vcl/source/app/scheduler.cxx:159)
    > ==1010==    by 0x107040EF: ImplYield(bool, bool, unsigned long) (/vcl/source/app/svapp.cxx:508)
    > ==1010==    by 0x106FE9A7: Application::Yield() (/vcl/source/app/svapp.cxx:558)
    > ==1010==    by 0x106FE92A: Application::Execute() (/vcl/source/app/svapp.cxx:458)
    > ==1010==    by 0x513F498: desktop::Desktop::DoExecute() (/desktop/source/app/app.cxx:1354)
    > ==1010==    by 0x5141660: desktop::Desktop::Main() (/desktop/source/app/app.cxx:1698)
    > ==1010==    by 0x10711884: ImplSVMain() (/vcl/source/app/svmain.cxx:192)
    > ==1010==    by 0x10713197: SVMain() (/vcl/source/app/svmain.cxx:230)
    > ==1010==    by 0x51AEDF7: soffice_main (/desktop/source/app/sofficemain.cxx:166)
    > ==1010==    by 0x40091C: sal_main (/desktop/source/app/main.c:48)
    > ==1010==    by 0x4008F6: main (/desktop/source/app/main.c:47)
    > ==1010==  Address 0x2ccca4e8 is 72 bytes inside a block of size 96 free'd
    > ==1010==    at 0x4C2F21A: operator delete(void*) (/builddir/build/BUILD/valgrind-3.12.0/coregrind/m_replacemalloc/vg_replace_malloc.c:576)
    > ==1010==    by 0x1085FA55: (anonymous namespace)::ExecuteWrapper::ExecuteActionHdl(Timer*) (/vcl/source/uitest/uno/uiobject_uno.cxx:102)
    > ==1010==    by 0x1085EDE7: (anonymous namespace)::ExecuteWrapper::LinkStubExecuteActionHdl(void*, Timer*) (/vcl/source/uitest/uno/uiobject_uno.cxx:85)
    > ==1010==    by 0x10715647: Link<Timer*, void>::Call(Timer*) const (/include/tools/link.hxx:84)
    > ==1010==    by 0x107154A6: Timer::Invoke() (/vcl/source/app/timer.cxx:89)
    > ==1010==    by 0x106D3841: ImplSchedulerData::Invoke() (/vcl/source/app/scheduler.cxx:46)
    > ==1010==    by 0x106D3D28: Scheduler::ProcessTaskScheduling(bool) (/vcl/source/app/scheduler.cxx:159)
    > ==1010==    by 0x107040EF: ImplYield(bool, bool, unsigned long) (/vcl/source/app/svapp.cxx:508)
    > ==1010==    by 0x106FE9A7: Application::Yield() (/vcl/source/app/svapp.cxx:558)
    > ==1010==    by 0x106FE92A: Application::Execute() (/vcl/source/app/svapp.cxx:458)
    > ==1010==    by 0x513F498: desktop::Desktop::DoExecute() (/desktop/source/app/app.cxx:1354)
    > ==1010==    by 0x5141660: desktop::Desktop::Main() (/desktop/source/app/app.cxx:1698)
    > ==1010==    by 0x10711884: ImplSVMain() (/vcl/source/app/svmain.cxx:192)
    > ==1010==    by 0x10713197: SVMain() (/vcl/source/app/svmain.cxx:230)
    > ==1010==    by 0x51AEDF7: soffice_main (/desktop/source/app/sofficemain.cxx:166)
    > ==1010==    by 0x40091C: sal_main (/desktop/source/app/main.c:48)
    > ==1010==    by 0x4008F6: main (/desktop/source/app/main.c:47)
    
    Change-Id: Ie95bf07f2fcd9420c9c24e6829272430895957a6

diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx b/vcl/source/uitest/uno/uiobject_uno.cxx
index 997fade9cc2a..c69988154653 100644
--- a/vcl/source/uitest/uno/uiobject_uno.cxx
+++ b/vcl/source/uitest/uno/uiobject_uno.cxx
@@ -84,20 +84,22 @@ public:
 
 IMPL_LINK_NOARG(ExecuteWrapper, ExecuteActionHdl, Timer*, void)
 {
-    Idle aIdle;
     {
-        mFunc();
-        aIdle.SetDebugName("UI Test Idle Handler2");
-        aIdle.SetPriority(TaskPriority::LOWEST);
-        aIdle.SetInvokeHandler(mHandler);
-        aIdle.Start();
-    }
+        Idle aIdle;
+        {
+            mFunc();
+            aIdle.SetDebugName("UI Test Idle Handler2");
+            aIdle.SetPriority(TaskPriority::LOWEST);
+            aIdle.SetInvokeHandler(mHandler);
+            aIdle.Start();
+        }
 
-    Scheduler::ProcessEventsToSignal(mbSignal);
-    std::unique_lock<std::mutex> lock(mMutex);
-    while (!mbSignal)
-    {
-        std::this_thread::sleep_for(std::chrono::milliseconds(5));
+        Scheduler::ProcessEventsToSignal(mbSignal);
+        std::unique_lock<std::mutex> lock(mMutex);
+        while (!mbSignal)
+        {
+            std::this_thread::sleep_for(std::chrono::milliseconds(5));
+        }
     }
     delete this;
 }


More information about the Libreoffice-commits mailing list