Title: [217608] trunk/Source/_javascript_Core
Revision
217608
Author
[email protected]
Date
2017-05-31 10:03:34 -0700 (Wed, 31 May 2017)

Log Message

Fix leak in PromiseDeferredTimer
https://bugs.webkit.org/show_bug.cgi?id=172755

Reviewed by JF Bastien.

We were not properly freeing the list of dependencies if we were already tracking the promise before.
This is because addPendingPromise takes the list of dependencies as an rvalue-reference. In the case
where we were already tracking the promise we append the provided dependency list to the existing list.
Since we never bound or rvalue-ref to a non-temporary value we never destructed the Vector, leaking its
contents.

* runtime/PromiseDeferredTimer.cpp:
(JSC::PromiseDeferredTimer::addPendingPromise):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (217607 => 217608)


--- trunk/Source/_javascript_Core/ChangeLog	2017-05-31 17:00:53 UTC (rev 217607)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-05-31 17:03:34 UTC (rev 217608)
@@ -1,3 +1,19 @@
+2017-05-31  Keith Miller  <[email protected]>
+
+        Fix leak in PromiseDeferredTimer
+        https://bugs.webkit.org/show_bug.cgi?id=172755
+
+        Reviewed by JF Bastien.
+
+        We were not properly freeing the list of dependencies if we were already tracking the promise before.
+        This is because addPendingPromise takes the list of dependencies as an rvalue-reference. In the case
+        where we were already tracking the promise we append the provided dependency list to the existing list.
+        Since we never bound or rvalue-ref to a non-temporary value we never destructed the Vector, leaking its
+        contents.
+
+        * runtime/PromiseDeferredTimer.cpp:
+        (JSC::PromiseDeferredTimer::addPendingPromise):
+
 2017-05-30  Oleksandr Skachkov  <[email protected]>
 
         Prevent async methods named 'function' in Object literal

Modified: trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp (217607 => 217608)


--- trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp	2017-05-31 17:00:53 UTC (rev 217607)
+++ trunk/Source/_javascript_Core/runtime/PromiseDeferredTimer.cpp	2017-05-31 17:03:34 UTC (rev 217608)
@@ -109,8 +109,10 @@
         dependencies.append(Strong<JSCell>(*m_vm, ticket));
         result.iterator->value = WTFMove(dependencies);
     } else {
+        // We need to make sure we move dependencies into a non-reference type so we actually destruct it.
+        Vector<Strong<JSCell>> deps = WTFMove(dependencies);
         dataLogLnIf(verbose, "Adding new dependencies for promise: ", RawPointer(ticket));
-        result.iterator->value.appendVector(dependencies);
+        result.iterator->value.appendVector(deps);
     }
 
 #ifndef NDEBUG
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to