Title: [152530] trunk/Tools
Revision
152530
Author
[email protected]
Date
2013-07-10 01:41:14 -0700 (Wed, 10 Jul 2013)

Log Message

[GTK] WebKitTestRunner tries to remove an already deleted event in EventSenderProxy::replaySavedEvents
https://bugs.webkit.org/show_bug.cgi?id=118509

Patch by Simon Pena <[email protected]> on 2013-07-10
Reviewed by Martin Robinson.

In EventSenderProxy::replaySavedEvents WebKitTestRunner can crash
when trying to remove an event already removed, if another event is
processed in the middle. By using a Deque's takeFirst, we ensure the
element is removed before we dispatch it.

fast/events/mousedown-inside-dragstart-should-not-cause-crash.html no longer
crashes after this fix is added.

* WebKitTestRunner/EventSenderProxy.h: Use a Deque instead of Vector in GTK
* WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
(WTR::EventSenderProxy::replaySavedEvents): Use takeFirst to retrieve the event
from the queue.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (152529 => 152530)


--- trunk/Tools/ChangeLog	2013-07-10 08:36:13 UTC (rev 152529)
+++ trunk/Tools/ChangeLog	2013-07-10 08:41:14 UTC (rev 152530)
@@ -1,3 +1,23 @@
+2013-07-10  Simon Pena  <[email protected]>
+
+        [GTK] WebKitTestRunner tries to remove an already deleted event in EventSenderProxy::replaySavedEvents
+        https://bugs.webkit.org/show_bug.cgi?id=118509
+
+        Reviewed by Martin Robinson.
+
+        In EventSenderProxy::replaySavedEvents WebKitTestRunner can crash
+        when trying to remove an event already removed, if another event is
+        processed in the middle. By using a Deque's takeFirst, we ensure the
+        element is removed before we dispatch it.
+
+        fast/events/mousedown-inside-dragstart-should-not-cause-crash.html no longer
+        crashes after this fix is added.
+
+        * WebKitTestRunner/EventSenderProxy.h: Use a Deque instead of Vector in GTK
+        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
+        (WTR::EventSenderProxy::replaySavedEvents): Use takeFirst to retrieve the event
+        from the queue.
+
 2013-07-09  Ryuan Choi  <[email protected]>
 
         [EFL] Add ewk_view_device_pixel_ratio_set

Modified: trunk/Tools/WebKitTestRunner/EventSenderProxy.h (152529 => 152530)


--- trunk/Tools/WebKitTestRunner/EventSenderProxy.h	2013-07-10 08:36:13 UTC (rev 152529)
+++ trunk/Tools/WebKitTestRunner/EventSenderProxy.h	2013-07-10 08:41:14 UTC (rev 152530)
@@ -32,7 +32,7 @@
 #include <QTouchEvent>
 #elif PLATFORM(GTK)
 #include <gdk/gdk.h>
-#include <wtf/Vector.h>
+#include <wtf/Deque.h>
 #elif PLATFORM(EFL)
 #include <WebKit2/EWebKit2.h>
 #include <wtf/Deque.h>
@@ -114,7 +114,7 @@
 #if PLATFORM(MAC)
     int eventNumber;
 #elif PLATFORM(GTK)
-    Vector<WTREventQueueItem> m_eventQueue;
+    Deque<WTREventQueueItem> m_eventQueue;
     unsigned m_mouseButtonCurrentlyDown;
 #elif PLATFORM(QT)
     Qt::MouseButtons m_mouseButtons;

Modified: trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp (152529 => 152530)


--- trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp	2013-07-10 08:36:13 UTC (rev 152529)
+++ trunk/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp	2013-07-10 08:41:14 UTC (rev 152530)
@@ -155,12 +155,11 @@
 void EventSenderProxy::replaySavedEvents()
 {
     while (!m_eventQueue.isEmpty()) {
-        WTREventQueueItem item = m_eventQueue.first();
+        WTREventQueueItem item = m_eventQueue.takeFirst();
         if (item.delay)
             g_usleep(item.delay * 1000);
 
         dispatchEvent(item.event);
-        m_eventQueue.remove(0);
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to