You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by hd...@apache.org on 2013/10/07 13:44:41 UTC

svn commit: r1529824 - /openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx

Author: hdu
Date: Mon Oct  7 11:44:41 2013
New Revision: 1529824

URL: http://svn.apache.org/r1529824
Log:
#i123418# prevent iterator decrement when it is at begin()

also prevent derefencing of an iterator after it has been erased

Modified:
    openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx

Modified: openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx?rev=1529824&r1=1529823&r2=1529824&view=diff
==============================================================================
--- openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx (original)
+++ openoffice/trunk/main/dbaccess/source/ui/browser/unodatbr.cxx Mon Oct  7 11:44:41 2013
@@ -1408,23 +1408,26 @@ void SAL_CALL SbaTableQueryBrowser::disp
 		{
             for (  ExternalFeaturesMap::iterator aLoop = m_aExternalFeatures.begin();
 				  aLoop != m_aExternalFeatures.end();
-				  ++aLoop
 				)
 			{
-				if ( aLoop->second.xDispatcher.get() == xSource.get() )
-				{
-                    ExternalFeaturesMap::iterator aPrevious = aLoop;
-					--aPrevious;
+				if ( aLoop->second.xDispatcher.get() != xSource.get() ) {
+					++aLoop;
+					continue;
+				}
 
-					// remove it
-					m_aExternalFeatures.erase( aLoop );
+				// prepare to erase the aLoop iterator
+				const sal_uInt16 nSlotId = aLoop->first;
+				ExternalFeaturesMap::iterator aNext = aLoop;
+				++aNext;
 
-					// maybe update the UI
-					implCheckExternalSlot(aLoop->first);
+				// remove it
+				m_aExternalFeatures.erase( aLoop );
 
-					// continue, the same XDispatch may be resposible for more than one URL
-					aLoop = aPrevious;
-				}
+				// maybe update the UI
+				implCheckExternalSlot( nSlotId );
+
+				// continue, the same XDispatch may be resposible for more than one URL
+				aLoop = aNext;
 			}
 		}
 		else