summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@wolfbeast.com>2019-10-23 11:29:38 +0200
committerwolfbeast <mcwerewolf@wolfbeast.com>2019-10-23 13:25:08 +0200
commit51b068dc653051baf3cf22feddd832f9f95ce12a (patch)
tree08b0dbd4c1bbe2bc0cd5c737bbe816f9daf87a0a
parent0b2791b56f658b6ec6ca7377dbcd2b72e6a78193 (diff)
downloadUXP-51b068dc653051baf3cf22feddd832f9f95ce12a.tar
UXP-51b068dc653051baf3cf22feddd832f9f95ce12a.tar.gz
UXP-51b068dc653051baf3cf22feddd832f9f95ce12a.tar.lz
UXP-51b068dc653051baf3cf22feddd832f9f95ce12a.tar.xz
UXP-51b068dc653051baf3cf22feddd832f9f95ce12a.zip
Avoid following the prototype chain
No longer follow the value's prototype chain when creating index updates in IndexedDB.
-rw-r--r--dom/indexedDB/IDBObjectStore.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp
index f86c619a7..cbac30894 100644
--- a/dom/indexedDB/IDBObjectStore.cpp
+++ b/dom/indexedDB/IDBObjectStore.cpp
@@ -1114,7 +1114,7 @@ IDBObjectStore::AppendIndexUpdateInfo(
}
bool isArray;
- if (!JS_IsArrayObject(aCx, val, &isArray)) {
+ if (NS_WARN_IF(!JS_IsArrayObject(aCx, val, &isArray))) {
IDB_REPORT_INTERNAL_ERR();
return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
}
@@ -1127,8 +1127,25 @@ IDBObjectStore::AppendIndexUpdateInfo(
}
for (uint32_t arrayIndex = 0; arrayIndex < arrayLength; arrayIndex++) {
- JS::Rooted<JS::Value> arrayItem(aCx);
- if (NS_WARN_IF(!JS_GetOwnElement(aCx, array, arrayIndex, &arrayItem))) {
+ JS::RootedId indexId(aCx);
+ if (NS_WARN_IF(!JS_IndexToId(aCx, arrayIndex, &indexId))) {
+ IDB_REPORT_INTERNAL_ERR();
+ return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
+ }
+
+ bool hasOwnProperty;
+ if (NS_WARN_IF(
+ !JS_HasOwnPropertyById(aCx, array, indexId, &hasOwnProperty))) {
+ IDB_REPORT_INTERNAL_ERR();
+ return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
+ }
+
+ if (!hasOwnProperty) {
+ continue;
+ }
+
+ JS::RootedValue arrayItem(aCx);
+ if (NS_WARN_IF(!JS_GetPropertyById(aCx, array, indexId, &arrayItem))) {
IDB_REPORT_INTERNAL_ERR();
return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
}