[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

sfalken at apple.com sfalken at apple.com
Thu Apr 8 01:18:37 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit d1afa30dc62627f451be1d4d12fc8743476b3c8a
Author: sfalken at apple.com <sfalken at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 21 01:04:24 2010 +0000

    Fix crash in geolocation when observers change during iteration.
    
    Reviewed by Sam Weinig.
    
    * page/GeolocationController.cpp:
    (WebCore::GeolocationController::positionChanged): Copy observers to vector while iterating.
    (WebCore::GeolocationController::errorOccurred): Copy observers to vector while iterating.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53582 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index fa452a7..3746188 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,13 @@
+2010-01-20  Steve Falkenburg  <sfalken at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Fix crash in geolocation when observers change during iteration.
+
+        * page/GeolocationController.cpp:
+        (WebCore::GeolocationController::positionChanged): Copy observers to vector while iterating.
+        (WebCore::GeolocationController::errorOccurred): Copy observers to vector while iterating.
+
 2010-01-19  Oliver Hunt  <oliver at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/WebCore/page/GeolocationController.cpp b/WebCore/page/GeolocationController.cpp
index 968e854..666f95e 100644
--- a/WebCore/page/GeolocationController.cpp
+++ b/WebCore/page/GeolocationController.cpp
@@ -64,16 +64,18 @@ void GeolocationController::removeObserver(Geolocation* observer)
 
 void GeolocationController::positionChanged(GeolocationPosition* position)
 {
-    HashSet<RefPtr<Geolocation> >::const_iterator end = m_observers.end();
-    for (HashSet<RefPtr<Geolocation> >::const_iterator it = m_observers.begin(); it != end; ++it)
-        (*it)->setPosition(position);
+    Vector<RefPtr<Geolocation> > observersVector;
+    copyToVector(m_observers, observersVector);
+    for (size_t i = 0; i < observersVector.size(); ++i)
+        observersVector[i]->setPosition(position);
 }
 
 void GeolocationController::errorOccurred(GeolocationError* error)
 {
-    HashSet<RefPtr<Geolocation> >::const_iterator end = m_observers.end();
-    for (HashSet<RefPtr<Geolocation> >::const_iterator it = m_observers.begin(); it != end; ++it)
-        (*it)->setError(error);
+    Vector<RefPtr<Geolocation> > observersVector;
+    copyToVector(m_observers, observersVector);
+    for (size_t i = 0; i < observersVector.size(); ++i)
+        observersVector[i]->setError(error);
 }
 
 GeolocationPosition* GeolocationController::lastPosition()

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list