Title: [290152] trunk/Source/WebCore
Revision
290152
Author
[email protected]
Date
2022-02-18 12:27:21 -0800 (Fri, 18 Feb 2022)

Log Message

Keep promise in scope when calling DeferredPromise::reject
https://bugs.webkit.org/show_bug.cgi?id=236454

Patch by Gabriel Nava Marino <[email protected]> on 2022-02-18
Reviewed by Darin Adler.

Keep promise in scope when calling DeferredPromise::reject, as createDOMException
could go through a path that invokes GC on its owner and the promise.

* Modules/fetch/FetchBodyConsumer.cpp:
(WebCore::FetchBodyConsumer::resolveWithFormData):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (290151 => 290152)


--- trunk/Source/WebCore/ChangeLog	2022-02-18 20:21:56 UTC (rev 290151)
+++ trunk/Source/WebCore/ChangeLog	2022-02-18 20:27:21 UTC (rev 290152)
@@ -1,3 +1,16 @@
+2022-02-18  Gabriel Nava Marino  <[email protected]>
+
+        Keep promise in scope when calling DeferredPromise::reject
+        https://bugs.webkit.org/show_bug.cgi?id=236454
+
+        Reviewed by Darin Adler.
+
+        Keep promise in scope when calling DeferredPromise::reject, as createDOMException
+        could go through a path that invokes GC on its owner and the promise.
+
+        * Modules/fetch/FetchBodyConsumer.cpp:
+        (WebCore::FetchBodyConsumer::resolveWithFormData):
+
 2022-02-18  Tim Horton  <[email protected]>
 
         Client-set minimum effective device width is not respected if AllowViewportShrinkToFitContent is enabled

Modified: trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp (290151 => 290152)


--- trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2022-02-18 20:21:56 UTC (rev 290151)
+++ trunk/Source/WebCore/Modules/fetch/FetchBodyConsumer.cpp	2022-02-18 20:27:21 UTC (rev 290152)
@@ -269,8 +269,9 @@
     if (!context)
         return;
 
-    m_formDataConsumer = makeUnique<FormDataConsumer>(formData, *context, [this, promise = WTFMove(promise), contentType, builder = SharedBufferBuilder { }](auto&& result) mutable {
+    m_formDataConsumer = makeUnique<FormDataConsumer>(formData, *context, [this, capturedPromise = WTFMove(promise), contentType, builder = SharedBufferBuilder { }](auto&& result) mutable {
         if (result.hasException()) {
+            auto promise = WTFMove(capturedPromise);
             promise->reject(result.releaseException());
             return;
         }
@@ -278,7 +279,7 @@
         auto& value = result.returnValue();
         if (value.empty()) {
             auto buffer = builder.takeAsContiguous();
-            resolveWithData(WTFMove(promise), contentType, buffer->data(), buffer->size());
+            resolveWithData(WTFMove(capturedPromise), contentType, buffer->data(), buffer->size());
             return;
         }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to