DOMCacheStorage: use-after-move in doSequentialMatch()
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Jan 2019 15:51:41 +0000 (15:51 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Jan 2019 15:51:41 +0000 (15:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=193396

Reviewed by Youenn Fablet.

Depending on the platform- and compiler-specific calling conventions,
the doSequentialMatch() code can move out the Vector<Ref<DOMCache>>
object into the callback lambda before the DOMCache object at the
specified index is retrieved for the DOMCache::doMatch() invocation.

This problem is now avoided by retrieving reference to the target
DOMCache object in an earlier expression.

* Modules/cache/DOMCacheStorage.cpp:
(WebCore::doSequentialMatch):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239927 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/Modules/cache/DOMCacheStorage.cpp

index 2385d43..2870e6b 100644 (file)
@@ -1,3 +1,21 @@
+2019-01-14  Zan Dobersek  <zdobersek@igalia.com>
+
+        DOMCacheStorage: use-after-move in doSequentialMatch()
+        https://bugs.webkit.org/show_bug.cgi?id=193396
+
+        Reviewed by Youenn Fablet.
+
+        Depending on the platform- and compiler-specific calling conventions,
+        the doSequentialMatch() code can move out the Vector<Ref<DOMCache>>
+        object into the callback lambda before the DOMCache object at the
+        specified index is retrieved for the DOMCache::doMatch() invocation.
+
+        This problem is now avoided by retrieving reference to the target
+        DOMCache object in an earlier expression.
+
+        * Modules/cache/DOMCacheStorage.cpp:
+        (WebCore::doSequentialMatch):
+
 2019-01-14  Zalan Bujtas  <zalan@apple.com>
 
         [LFC][BFC] Add basic box-sizing support.
index bfa3377..87062d1 100644 (file)
@@ -59,7 +59,8 @@ static void doSequentialMatch(size_t index, Vector<Ref<DOMCache>>&& caches, DOMC
         return;
     }
 
-    caches[index]->doMatch(WTFMove(info), WTFMove(options), [caches = WTFMove(caches), info, options, completionHandler = WTFMove(completionHandler), index](ExceptionOr<FetchResponse*>&& result) mutable {
+    auto& cache = caches[index].get();
+    cache.doMatch(WTFMove(info), WTFMove(options), [caches = WTFMove(caches), info, options, completionHandler = WTFMove(completionHandler), index](ExceptionOr<FetchResponse*>&& result) mutable {
         if (result.hasException()) {
             completionHandler(result.releaseException());
             return;