From 378244942f7535a15b07f2612ebb7716df5e0851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20B=C3=A1tyai?= Date: Mon, 18 May 2020 21:22:08 +0200 Subject: [PATCH] Fix iterator closing in Promise all/race (#3759) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JerryScript-DCO-1.0-Signed-off-by: Dániel Bátyai dbatyai@inf.u-szeged.hu --- jerry-core/ecma/builtin-objects/ecma-builtin-promise.c | 2 +- tests/jerry/es2015/promise-all-iterator.js | 5 +++++ tests/jerry/es2015/promise-race-iterator.js | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c index 0d7b9cc70..ca9e56753 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-promise.c @@ -553,7 +553,7 @@ ecma_builtin_promise_race_or_all (ecma_value_t this_arg, /**< 'this' argument */ if (ECMA_IS_VALUE_ERROR (ret)) { - if (is_done) + if (!is_done) { ret = ecma_op_iterator_close (iterator); } diff --git a/tests/jerry/es2015/promise-all-iterator.js b/tests/jerry/es2015/promise-all-iterator.js index 6850fb174..4c53cf3c0 100644 --- a/tests/jerry/es2015/promise-all-iterator.js +++ b/tests/jerry/es2015/promise-all-iterator.js @@ -74,3 +74,8 @@ var rejects = Promise.all(createIterable([ fulfills.then(result => { assert (result + "" === "foo,bar"); }); rejects.catch(result => { assert (result === "baz"); }); + +var closed = false; +delete Promise.resolve; +Promise.all(createIterable([1,2,3], {'return': function () { closed = true; }})); +assert (closed); diff --git a/tests/jerry/es2015/promise-race-iterator.js b/tests/jerry/es2015/promise-race-iterator.js index 2575b88da..e225d5482 100644 --- a/tests/jerry/es2015/promise-race-iterator.js +++ b/tests/jerry/es2015/promise-race-iterator.js @@ -62,3 +62,8 @@ var rejects = Promise.race(createIterable([ fulfills.then(result => { assert (result + "" === "foo"); }); rejects.catch(result => { assert (result === "baz"); }); + +var closed = false; +delete Promise.resolve; +Promise.race(createIterable([1,2,3], {'return': function () { closed = true; }})); +assert (closed);