summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2018-05-08 10:46:48 +0200
committerMichal Klocek <michal.klocek@qt.io>2018-05-28 10:44:47 +0000
commit4b9accdb67edfa1587ffe4f8871090fdc6249a46 (patch)
tree48fd635418e925235d907c0098c50ec30f2d4944
parent49875ee5327ddf006a44a244e71b511795d38791 (diff)
[Backport] Security Bug 831984
Merged: [keys] Don't keep chain of OrderedHashSets in KeyAccumulator Revision: 7bb79b96bdd29c41acc8cf36c428dd66308e5b66 BUG=chromium:831984 LOG=N NOTRY=true NOPRESUBMIT=true NOTREECHECKS=true R=ishell@chromium.org Reviewed-on: https://chromium-review.googlesource.com/1028233 Change-Id: I075d4cd0df179e7ed283017f00888bc8bc75b9e0 Reviewed-by: Viktor Engelmann <viktor.engelmann@qt.io> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--chromium/v8/src/keys.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/chromium/v8/src/keys.cc b/chromium/v8/src/keys.cc
index 9b6c8f3381f..f798aecc2fb 100644
--- a/chromium/v8/src/keys.cc
+++ b/chromium/v8/src/keys.cc
@@ -3,7 +3,6 @@
// found in the LICENSE file.
#include "src/keys.h"
-
#include "src/api-arguments.h"
#include "src/elements.h"
#include "src/factory.h"
@@ -77,7 +76,14 @@ void KeyAccumulator::AddKey(Handle<Object> key, AddKeyConversion convert) {
Handle<String>::cast(key)->AsArrayIndex(&index)) {
key = isolate_->factory()->NewNumberFromUint(index);
}
- keys_ = OrderedHashSet::Add(keys(), key);
+ Handle<OrderedHashSet> new_set = OrderedHashSet::Add(keys(), key);
+ if (*new_set != *keys_) {
+ // The keys_ Set is converted directly to a FixedArray in GetKeys which can
+ // be left-trimmer. Hence the previous Set should not keep a pointer to the
+ // new one.
+ keys_->set(OrderedHashSet::kNextTableIndex, Smi::kZero);
+ keys_ = new_set;
+ }
}
void KeyAccumulator::AddKeys(Handle<FixedArray> array,