From 473badf5fabf0856f89aa6be3d25b639fa217a7e Mon Sep 17 00:00:00 2001 From: arv Date: Mon, 29 Jun 2015 11:14:29 -0700 Subject: [PATCH] [es6] Make sure we do not invoke setter when calling Promise.all We were calling the setter for Object.prototype.promise if it existed when calling PromiseAll. BUG=v9:4232 LOG=N R=rossberg@chromium.org, adamk@chromium.org Review URL: https://codereview.chromium.org/1219623005 Cr-Commit-Position: refs/heads/master@{#29357} --- src/promise.js | 4 ++-- test/mjsunit/es6/promise-internal-setter.js | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 test/mjsunit/es6/promise-internal-setter.js diff --git a/src/promise.js b/src/promise.js index 2634fde0b..0fd4b89c5 100644 --- a/src/promise.js +++ b/src/promise.js @@ -189,11 +189,11 @@ function PromiseDeferred() { reject: function(r) { PromiseReject(promise, r) } }; } else { - var result = {}; + var result = {promise: UNDEFINED, reject: UNDEFINED, resolve: UNDEFINED}; result.promise = new this(function(resolve, reject) { result.resolve = resolve; result.reject = reject; - }) + }); return result; } } diff --git a/test/mjsunit/es6/promise-internal-setter.js b/test/mjsunit/es6/promise-internal-setter.js new file mode 100644 index 000000000..83e473831 --- /dev/null +++ b/test/mjsunit/es6/promise-internal-setter.js @@ -0,0 +1,17 @@ +// Copyright 2015 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +'use strict'; + +Object.defineProperties(Object.prototype, { + promise: {set: assertUnreachable}, + reject: {set: assertUnreachable}, + resolve: {set: assertUnreachable}, +}); + +class P extends Promise {} + +P.all([Promise.resolve('ok')]); +P.race([Promise.resolve('ok')]); +P.defer(); -- 2.34.1