summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Giesecke <sgiesecke@mozilla.com>2020-02-14 14:39:40 +0100
committerwolfbeast <mcwerewolf@wolfbeast.com>2020-02-15 13:23:18 +0100
commit9600e2dc87ca84994ef2867ae1e81428da05cd06 (patch)
tree09110a97fe30f817e8a7ab1971dbd48195ed0e5d
parent32de0e3ccc2ec205e910ded6a748289a7a6feeea (diff)
downloadUXP-9600e2dc87ca84994ef2867ae1e81428da05cd06.tar
UXP-9600e2dc87ca84994ef2867ae1e81428da05cd06.tar.gz
UXP-9600e2dc87ca84994ef2867ae1e81428da05cd06.tar.lz
UXP-9600e2dc87ca84994ef2867ae1e81428da05cd06.tar.xz
UXP-9600e2dc87ca84994ef2867ae1e81428da05cd06.zip
[IndexedDB] Ensure that strong references to newly created cursors are
kept until the DOM Binding is created. This fixes random crashes on websites that use IndexedDB cursors. See also BZ bug 1599420
-rw-r--r--dom/indexedDB/ActorsChild.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/dom/indexedDB/ActorsChild.cpp b/dom/indexedDB/ActorsChild.cpp
index 30dc9b6da..85f876cdc 100644
--- a/dom/indexedDB/ActorsChild.cpp
+++ b/dom/indexedDB/ActorsChild.cpp
@@ -3291,6 +3291,10 @@ BackgroundCursorChild::HandleResponse(
auto& responses =
const_cast<nsTArray<ObjectStoreCursorResponse>&>(aResponses);
+ // If a new cursor is created, we need to keep a reference to it until the
+ // ResultHelper creates a DOM Binding.
+ RefPtr<IDBCursor> newCursor;
+
for (ObjectStoreCursorResponse& response : responses) {
StructuredCloneReadInfo cloneReadInfo(Move(response.cloneInfo()));
cloneReadInfo.mDatabase = mTransaction->Database();
@@ -3300,8 +3304,6 @@ BackgroundCursorChild::HandleResponse(
nullptr,
cloneReadInfo.mFiles);
- RefPtr<IDBCursor> newCursor;
-
if (mCursor) {
mCursor->Reset(Move(response.key()), Move(cloneReadInfo));
} else {