diff options
author | Pale Moon <git-repo@palemoon.org> | 2017-11-21 15:27:42 +0100 |
---|---|---|
committer | Pale Moon <git-repo@palemoon.org> | 2017-11-21 15:27:42 +0100 |
commit | e8afb19765f76ca177fea191ae5be06bee4a7757 (patch) | |
tree | 85c6481a495d16a0d059c3d8820bcdd9a6d3e8b1 /dom/base/nsNodeUtils.cpp | |
parent | 2fef221323f0810911a9423f14972af0de2a696c (diff) | |
download | palemoon-gre-e8afb19765f76ca177fea191ae5be06bee4a7757.tar.gz |
In order to not leak properties, ensure all the properties of adopted nodes are removed in case the adopt call fails.
Diffstat (limited to 'dom/base/nsNodeUtils.cpp')
-rw-r--r-- | dom/base/nsNodeUtils.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index 8806773a4..517700907 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -498,6 +498,15 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, } } + if (aNode->HasProperties()) { + bool ok = aNodesWithProperties.AppendObject(aNode); + MOZ_RELEASE_ASSERT(ok, "Out of memory"); + if (aClone) { + ok = aNodesWithProperties.AppendObject(clone); + MOZ_RELEASE_ASSERT(ok, "Out of memory"); + } + } + // Cloning template element. if (aDeep && aClone && IsTemplateElement(aNode)) { DocumentFragment* origContent = @@ -541,15 +550,6 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, } #endif - if (aNode->HasProperties()) { - bool ok = aNodesWithProperties.AppendObject(aNode); - if (aClone) { - ok = ok && aNodesWithProperties.AppendObject(clone); - } - - NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY); - } - clone.forget(aResult); return NS_OK; |