svl/source/notify/broadcast.cxx |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit bf1812806056349fd32785e1fa7ba7595c8c66fa
Author: Markus Mohrhard <markus.mohrh...@googlemail.com>
Date:   Mon Dec 23 23:46:02 2013 +0100

    fix crash when erasing entry while iterating through vector
    
    Broadcast might result in calling Remove on the same object which erases
    the entry from the listeners vector. If we create a copy we can still
    iterate through the vector as all iterators are still valid.

diff --git a/svl/source/notify/broadcast.cxx b/svl/source/notify/broadcast.cxx
index 425a1e2..19abe38 100644
--- a/svl/source/notify/broadcast.cxx
+++ b/svl/source/notify/broadcast.cxx
@@ -124,7 +124,8 @@ void SvtBroadcaster::Broadcast( const SfxHint &rHint )
     Normalize();
 
     ListenersType::iterator dest(maDestructedListeners.begin());
-    for (ListenersType::iterator it(maListeners.begin()); it != 
maListeners.end(); ++it)
+    ListenersType aListeners(maListeners); // this copy is important to avoid 
erasing entries while iterating
+    for (ListenersType::iterator it(aListeners.begin()); it != 
aListeners.end(); ++it)
     {
         // skip the destructed ones
         while (dest != maDestructedListeners.end() && (*dest < *it))
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to