On Sat, 2012-01-14 at 11:17 -0800, julien2412 wrote:
> Hello,
> 
> I propose the attached patch for fdo#44040 (see
> https://bugs.freedesktop.org/attachment.cgi?id=55580)
> Since I could have missed something, I would like your opinion about this.

Does this work ? I worry (maybe I'm out of date on this one?) that
std::map::erase only returns an iterator in C++11x not C++98 which we
still support.

Assuming this works it avoids the two problems I see of
a) trying to move aPrevious to before the first valid iterator if aLoop
points to the first entry
b) deferencing aLoop after its been deleted in aLoop->first
which retaining the apparent rest of the logic

C.
diff --git a/dbaccess/source/ui/browser/unodatbr.cxx b/dbaccess/source/ui/browser/unodatbr.cxx
index 4d980a0..4a80a9e 100644
--- a/dbaccess/source/ui/browser/unodatbr.cxx
+++ b/dbaccess/source/ui/browser/unodatbr.cxx
@@ -1410,24 +1410,22 @@ void SAL_CALL SbaTableQueryBrowser::disposing( const EventObject& _rSource ) thr
         Reference< XDispatch > xSource(_rSource.Source, UNO_QUERY);
         if(xSource.is())
         {
-            for (  ExternalFeaturesMap::iterator aLoop = m_aExternalFeatures.begin();
-                  aLoop != m_aExternalFeatures.end();
-                  ++aLoop
-                )
+            ExternalFeaturesMap::iterator aLoop = m_aExternalFeatures.begin();
+            ExternalFeaturesMap::iterator aEnd = m_aExternalFeatures.end();
+            while (aLoop != aEnd);
             {
-                if ( aLoop->second.xDispatcher.get() == xSource.get() )
+                ExternalFeaturesMap::iterator aI = aLoop++;
+                if ( aI->second.xDispatcher.get() == xSource.get() )
                 {
-                    ExternalFeaturesMap::iterator aPrevious = aLoop;
-                    --aPrevious;
+                    sal_uInt16 nSlot = aI->first;
 
                     // remove it
-                    m_aExternalFeatures.erase( aLoop );
+                    m_aExternalFeatures.erase(aI);
 
                     // maybe update the UI
-                    implCheckExternalSlot(aLoop->first);
+                    implCheckExternalSlot(nSlot);
 
                     // continue, the same XDispatch may be resposible for more than one URL
-                    aLoop = aPrevious;
                 }
             }
         }
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to