From 6db6f6ac23c76c97d4d31f8425723e611c9039de Mon Sep 17 00:00:00 2001 From: Cameron Kaiser Date: Mon, 26 Nov 2018 17:45:46 -0800 Subject: [PATCH] #534: M1499861 M1500759 M1500310 M1507907 --- dom/crypto/WebCryptoTask.cpp | 6 +-- dom/html/HTMLOptionsCollection.cpp | 55 +++---------------------- dom/html/HTMLOptionsCollection.h | 9 +--- dom/html/HTMLSelectElement.cpp | 5 --- dom/html/HTMLSelectElement.h | 2 +- dom/indexedDB/IDBObjectStore.cpp | 29 ++++++++----- intl/locale/mac/nsDateTimeFormatMac.cpp | 2 + 7 files changed, 31 insertions(+), 77 deletions(-) diff --git a/dom/crypto/WebCryptoTask.cpp b/dom/crypto/WebCryptoTask.cpp index f10598227..1e74c205f 100644 --- a/dom/crypto/WebCryptoTask.cpp +++ b/dom/crypto/WebCryptoTask.cpp @@ -487,7 +487,7 @@ public: mMechanism = CKM_AES_CBC_PAD; telemetryAlg = TA_AES_CBC; - AesCbcParams params; + RootedDictionary params(aCx); nsresult rv = Coerce(aCx, params, aAlgorithm); if (NS_FAILED(rv)) { mEarlyRv = NS_ERROR_DOM_INVALID_ACCESS_ERR; @@ -504,7 +504,7 @@ public: mMechanism = CKM_AES_CTR; telemetryAlg = TA_AES_CTR; - AesCtrParams params; + RootedDictionary params(aCx); nsresult rv = Coerce(aCx, params, aAlgorithm); if (NS_FAILED(rv)) { mEarlyRv = NS_ERROR_DOM_SYNTAX_ERR; @@ -523,7 +523,7 @@ public: mMechanism = CKM_AES_GCM; telemetryAlg = TA_AES_GCM; - AesGcmParams params; + RootedDictionary params(aCx); nsresult rv = Coerce(aCx, params, aAlgorithm); if (NS_FAILED(rv)) { mEarlyRv = NS_ERROR_DOM_SYNTAX_ERR; diff --git a/dom/html/HTMLOptionsCollection.cpp b/dom/html/HTMLOptionsCollection.cpp index b4611aaf4..2174149d9 100644 --- a/dom/html/HTMLOptionsCollection.cpp +++ b/dom/html/HTMLOptionsCollection.cpp @@ -35,23 +35,8 @@ namespace mozilla { namespace dom { HTMLOptionsCollection::HTMLOptionsCollection(HTMLSelectElement* aSelect) -{ - // Do not maintain a reference counted reference. When - // the select goes away, it will let us know. - mSelect = aSelect; -} - -HTMLOptionsCollection::~HTMLOptionsCollection() -{ - DropReference(); -} - -void -HTMLOptionsCollection::DropReference() -{ - // Drop our (non ref-counted) reference - mSelect = nullptr; -} + : mSelect(aSelect) +{} nsresult HTMLOptionsCollection::GetOptionIndex(Element* aOption, @@ -88,7 +73,9 @@ HTMLOptionsCollection::GetOptionIndex(Element* aOption, } -NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(HTMLOptionsCollection, mElements) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(HTMLOptionsCollection, + mElements, + mSelect) // nsISupports @@ -124,10 +111,6 @@ HTMLOptionsCollection::GetLength(uint32_t* aLength) NS_IMETHODIMP HTMLOptionsCollection::SetLength(uint32_t aLength) { - if (!mSelect) { - return NS_ERROR_UNEXPECTED; - } - return mSelect->SetLength(aLength); } @@ -135,10 +118,6 @@ NS_IMETHODIMP HTMLOptionsCollection::SetOption(uint32_t aIndex, nsIDOMHTMLOptionElement* aOption) { - if (!mSelect) { - return NS_OK; - } - // if the new option is null, just remove this option. Note that it's safe // to pass a too-large aIndex in here. if (!aOption) { @@ -187,11 +166,6 @@ HTMLOptionsCollection::SetOption(uint32_t aIndex, int32_t HTMLOptionsCollection::GetSelectedIndex(ErrorResult& aError) { - if (!mSelect) { - aError.Throw(NS_ERROR_UNEXPECTED); - return 0; - } - int32_t selectedIndex; aError = mSelect->GetSelectedIndex(&selectedIndex); return selectedIndex; @@ -209,11 +183,6 @@ void HTMLOptionsCollection::SetSelectedIndex(int32_t aSelectedIndex, ErrorResult& aError) { - if (!mSelect) { - aError.Throw(NS_ERROR_UNEXPECTED); - return; - } - aError = mSelect->SetSelectedIndex(aSelectedIndex); } @@ -331,10 +300,6 @@ HTMLOptionsCollection::Add(nsIDOMHTMLOptionElement* aOption, return NS_ERROR_INVALID_ARG; } - if (!mSelect) { - return NS_ERROR_NOT_INITIALIZED; - } - nsCOMPtr elem = do_QueryInterface(aOption); return mSelect->Add(elem, aBefore); } @@ -344,22 +309,12 @@ HTMLOptionsCollection::Add(const HTMLOptionOrOptGroupElement& aElement, const Nullable& aBefore, ErrorResult& aError) { - if (!mSelect) { - aError.Throw(NS_ERROR_NOT_INITIALIZED); - return; - } - mSelect->Add(aElement, aBefore, aError); } void HTMLOptionsCollection::Remove(int32_t aIndex, ErrorResult& aError) { - if (!mSelect) { - aError.Throw(NS_ERROR_UNEXPECTED); - return; - } - uint32_t len = 0; mSelect->GetLength(&len); if (aIndex < 0 || (uint32_t)aIndex >= len) diff --git a/dom/html/HTMLOptionsCollection.h b/dom/html/HTMLOptionsCollection.h index 3bdd1e3d6..01df82768 100644 --- a/dom/html/HTMLOptionsCollection.h +++ b/dom/html/HTMLOptionsCollection.h @@ -46,7 +46,7 @@ public: using nsWrapperCache::GetWrapper; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; protected: - virtual ~HTMLOptionsCollection(); + virtual ~HTMLOptionsCollection() = default; virtual JSObject* GetWrapperPreserveColorInternal() override { @@ -112,11 +112,6 @@ public: mElements.AppendElement(aOption); } - /** - * Drop the reference to the select. Called during select destruction. - */ - void DropReference(); - /** * Finds the index of a given option element. * If the option isn't part of the collection, return NS_ERROR_FAILURE @@ -162,7 +157,7 @@ private: * various members such as InsertOptionAt are also infallible. */ nsTArray > mElements; /** The select element that contains this array */ - HTMLSelectElement* mSelect; + RefPtr mSelect; }; } // namespace dom diff --git a/dom/html/HTMLSelectElement.cpp b/dom/html/HTMLSelectElement.cpp index 7e2fb5a32..75a88f55a 100644 --- a/dom/html/HTMLSelectElement.cpp +++ b/dom/html/HTMLSelectElement.cpp @@ -130,11 +130,6 @@ HTMLSelectElement::HTMLSelectElement(already_AddRefed& a NS_EVENT_STATE_VALID); } -HTMLSelectElement::~HTMLSelectElement() -{ - mOptions->DropReference(); -} - // ISupports NS_IMPL_CYCLE_COLLECTION_CLASS(HTMLSelectElement) diff --git a/dom/html/HTMLSelectElement.h b/dom/html/HTMLSelectElement.h index b3e7885eb..8a63d4c25 100644 --- a/dom/html/HTMLSelectElement.h +++ b/dom/html/HTMLSelectElement.h @@ -431,7 +431,7 @@ public: } protected: - virtual ~HTMLSelectElement(); + virtual ~HTMLSelectElement() = default; friend class SafeOptionListMutation; diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp index b11009966..aff35903e 100644 --- a/dom/indexedDB/IDBObjectStore.cpp +++ b/dom/indexedDB/IDBObjectStore.cpp @@ -1251,20 +1251,22 @@ IDBObjectStore::GetAddInfo(JSContext* aCx, } // Figure out indexes and the index values to update here. - const nsTArray& indexes = mSpec->indexes(); + { + const nsTArray& indexes = mSpec->indexes(); + uint32_t idxCount = indexes.Length(); - const uint32_t idxCount = indexes.Length(); - aUpdateInfoArray.SetCapacity(idxCount); // Pretty good estimate + aUpdateInfoArray.SetCapacity(idxCount); // Pretty good estimate - for (uint32_t idxIndex = 0; idxIndex < idxCount; idxIndex++) { - const IndexMetadata& metadata = indexes[idxIndex]; + for (uint32_t idxIndex = 0; idxIndex < idxCount; idxIndex++) { + const IndexMetadata& metadata = indexes[idxIndex]; - rv = AppendIndexUpdateInfo(metadata.id(), metadata.keyPath(), - metadata.unique(), metadata.multiEntry(), - metadata.locale(), aCx, aValue, - aUpdateInfoArray); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; + rv = AppendIndexUpdateInfo(metadata.id(), metadata.keyPath(), + metadata.unique(), metadata.multiEntry(), + metadata.locale(), aCx, aValue, + aUpdateInfoArray); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } } } @@ -1322,6 +1324,11 @@ IDBObjectStore::AddOrPut(JSContext* aCx, return nullptr; } + if (!mTransaction->IsOpen()) { + aRv.Throw(NS_ERROR_DOM_INDEXEDDB_TRANSACTION_INACTIVE_ERR); + return nullptr; + } + FallibleTArray cloneData; if (NS_WARN_IF(!cloneData.SetLength(cloneWriteInfo.mCloneBuffer.nbytes(), fallible))) { diff --git a/intl/locale/mac/nsDateTimeFormatMac.cpp b/intl/locale/mac/nsDateTimeFormatMac.cpp index e4ab1fc82..9153cf215 100644 --- a/intl/locale/mac/nsDateTimeFormatMac.cpp +++ b/intl/locale/mac/nsDateTimeFormatMac.cpp @@ -164,6 +164,8 @@ nsresult nsDateTimeFormatMac::FormatTMTime(nsILocale* locale, // Create the formatter and fix up its formatting as necessary: CFDateFormatterRef formatter = CFDateFormatterCreate(nullptr, formatterLocale, dateStyle, timeStyle); + if (MOZ_UNLIKELY(!formatter)) + return NS_ERROR_FAILURE; // don't continue CFRelease(formatterLocale);