Skip to content

Commit 7717d2e

Browse files
Daniel Ballarerobika
authored andcommitted
Change Promise properties to internal properties (#2526)
There was an issue in the Promise implementation where properties were accessible from JavaScript. ie. `Object.defineProperty(Object.prototype, 0, {})` could modify properties which should've been inaccessible. The reason behind that is somewhat interesting as 0-7 were the same values as the enum values in the property list of the Promise object. Changing these properties to internal, makes them inaccessible from JS side. Also some tests have been changed, namely 2490 and 2465. The 2490 one got renamed, and all of the testcases from the issue have been added. 2465 got changed as well, since currently our Promise implementation can't display Promise errors, so we should check if an error is correctly returned. Fixes #2490 Co-authored-by: Robert Fancsik <[email protected]> JerryScript-DCO-1.0-Signed-off-by: Daniel Balla [email protected]
1 parent d08b46d commit 7717d2e

12 files changed

+108
-59
lines changed

jerry-core/api/jerry-snapshot.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ typedef struct
4141
/**
4242
* Jerry snapshot format version.
4343
*/
44-
#define JERRY_SNAPSHOT_VERSION (17u)
44+
#define JERRY_SNAPSHOT_VERSION (18u)
4545

4646
/**
4747
* Snapshot configuration flags.

jerry-core/ecma/builtin-objects/ecma-builtin-promise.c

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ ecma_builtin_promise_reject_or_resolve (ecma_value_t this_arg, /**< "this" argum
8383

8484
if (is_resolve)
8585
{
86-
property_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
86+
property_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
8787
}
8888
else
8989
{
90-
property_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
90+
property_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
9191
}
9292

9393
ecma_value_t func = ecma_op_object_get (ecma_get_object_from_value (capability), property_str_p);
@@ -106,7 +106,7 @@ ecma_builtin_promise_reject_or_resolve (ecma_value_t this_arg, /**< "this" argum
106106

107107
ecma_free_value (call_ret);
108108

109-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
109+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
110110
ecma_value_t promise_new = ecma_op_object_get (ecma_get_object_from_value (capability), promise_str_p);
111111
ecma_free_value (capability);
112112

@@ -127,7 +127,7 @@ ecma_builtin_promise_reject_abrupt (ecma_value_t capability) /**< reject descrip
127127
{
128128
ecma_raise_type_error (ECMA_ERR_MSG ("Second argument is not an array."));
129129
ecma_value_t reason = JERRY_CONTEXT (error_value);
130-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
130+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
131131
ecma_value_t reject = ecma_op_object_get (ecma_get_object_from_value (capability), reject_str_p);
132132

133133
ecma_value_t call_ret = ecma_op_function_call (ecma_get_object_from_value (reject),
@@ -144,7 +144,7 @@ ecma_builtin_promise_reject_abrupt (ecma_value_t capability) /**< reject descrip
144144

145145
ecma_free_value (call_ret);
146146

147-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
147+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
148148
ecma_value_t promise_new = ecma_op_object_get (ecma_get_object_from_value (capability), promise_str_p);
149149

150150
return promise_new;
@@ -208,9 +208,9 @@ ecma_builtin_promise_do_race (ecma_value_t array, /**< the array for race */
208208
ecma_length_t len = (ecma_length_t) ecma_get_integer_from_value (len_value);
209209
ecma_fast_free_value (len_value);
210210

211-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
212-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
213-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
211+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
212+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
213+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
214214

215215
ecma_value_t resolve = ecma_op_object_get (ecma_get_object_from_value (capability),
216216
resolve_str_p);
@@ -318,7 +318,8 @@ ecma_builtin_promise_all_handler (const ecma_value_t function, /**< the function
318318
ecma_value_t ret = ECMA_VALUE_UNDEFINED;
319319
/* 1. */
320320
ecma_object_t *function_p = ecma_get_object_from_value (function);
321-
ecma_string_t *already_called_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_ALREADY_CALLED);
321+
ecma_string_t *already_called_str_p;
322+
already_called_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_ALREADY_CALLED);
322323
ecma_value_t already_called = ecma_op_object_get (function_p, already_called_str_p);
323324

324325
JERRY_ASSERT (ecma_is_value_boolean (already_called));
@@ -336,10 +337,10 @@ ecma_builtin_promise_all_handler (const ecma_value_t function, /**< the function
336337
ecma_make_boolean_value (true),
337338
false);
338339

339-
ecma_string_t *str_index_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_INDEX);
340-
ecma_string_t *str_value_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_VALUE);
341-
ecma_string_t *str_capability_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
342-
ecma_string_t *str_remaining_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REMAINING_ELEMENT);
340+
ecma_string_t *str_index_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_INDEX);
341+
ecma_string_t *str_value_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_VALUE);
342+
ecma_string_t *str_capability_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
343+
ecma_string_t *str_remaining_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REMAINING_ELEMENT);
343344

344345
/* 4-7. */
345346
ecma_value_t index_val = ecma_op_object_get (function_p, str_index_p);
@@ -361,7 +362,7 @@ ecma_builtin_promise_all_handler (const ecma_value_t function, /**< the function
361362
/* 9-10. */
362363
if (ecma_builtin_promise_remaining_inc_or_dec (remaining, false) == 0)
363364
{
364-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
365+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
365366
ecma_value_t resolve = ecma_op_object_get (ecma_get_object_from_value (capability), resolve_str_p);
366367

367368
ret = ecma_op_function_call (ecma_get_object_from_value (resolve),
@@ -406,14 +407,15 @@ ecma_builtin_promise_do_all (ecma_value_t array, /**< the array for all */
406407
ecma_length_t len = (ecma_length_t) ecma_get_integer_from_value (len_value);
407408
ecma_fast_free_value (len_value);
408409

409-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
410-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
411-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
412-
ecma_string_t *already_called_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_ALREADY_CALLED);
413-
ecma_string_t *index_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_INDEX);
414-
ecma_string_t *value_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_VALUE);
415-
ecma_string_t *capability_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
416-
ecma_string_t *remaining_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REMAINING_ELEMENT);
410+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
411+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
412+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
413+
ecma_string_t *already_called_str_p;
414+
already_called_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_ALREADY_CALLED);
415+
ecma_string_t *index_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_INDEX);
416+
ecma_string_t *value_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_VALUE);
417+
ecma_string_t *capability_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
418+
ecma_string_t *remaining_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REMAINING_ELEMENT);
417419

418420
ecma_value_t undefined_val = ECMA_VALUE_UNDEFINED;
419421
/* String '1' indicates [[Resolve]] and '2' indicates [[Reject]]. */

jerry-core/ecma/operations/ecma-jobqueue.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ ecma_process_promise_reaction_job (void *obj_p) /**< the job to be operated */
145145
ecma_job_promise_reaction_t *job_p = (ecma_job_promise_reaction_t *) obj_p;
146146
ecma_object_t *reaction_p = ecma_get_object_from_value (job_p->reaction);
147147

148-
ecma_string_t *capability_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
149-
ecma_string_t *handler_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_HANDLER);
150-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
151-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
148+
ecma_string_t *capability_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
149+
ecma_string_t *handler_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_HANDLER);
150+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
151+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
152152

153153
/* 2. */
154154
ecma_value_t capability = ecma_op_object_get (reaction_p, capability_str_p);

jerry-core/ecma/operations/ecma-promise-object.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,9 @@ ecma_call_builtin_executor (ecma_object_t *executor_p, /**< the executor object
362362
ecma_value_t resolve_func, /**< the resolve function */
363363
ecma_value_t reject_func) /**< the reject function */
364364
{
365-
ecma_string_t *capability_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
366-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
367-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
365+
ecma_string_t *capability_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
366+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
367+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
368368

369369
/* 2. */
370370
ecma_value_t capability = ecma_op_object_get (executor_p, capability_str_p);
@@ -585,8 +585,8 @@ ecma_promise_new_capability (void)
585585
/* 3. */
586586
ecma_object_t *capability_p = ecma_op_create_object_object_noarg ();
587587

588-
ecma_string_t *capability_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
589-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
588+
ecma_string_t *capability_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
589+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
590590
/* 4. */
591591
ecma_object_t *executor_p;
592592
executor_p = ecma_op_create_object_object_noarg ();
@@ -618,7 +618,7 @@ ecma_promise_new_capability (void)
618618

619619
ecma_free_value (promise);
620620
/* 8. */
621-
ecma_string_t *resolve_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_RESOLVE);
621+
ecma_string_t *resolve_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE);
622622
ecma_value_t resolve = ecma_op_object_get (capability_p, resolve_str_p);
623623

624624
if (!ecma_op_is_callable (resolve))
@@ -630,7 +630,7 @@ ecma_promise_new_capability (void)
630630

631631
ecma_free_value (resolve);
632632
/* 9. */
633-
ecma_string_t *reject_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_REJECT);
633+
ecma_string_t *reject_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT);
634634
ecma_value_t reject = ecma_op_object_get (capability_p, reject_str_p);
635635

636636
if (!ecma_op_is_callable (reject))
@@ -660,9 +660,9 @@ ecma_promise_do_then (ecma_value_t promise, /**< the promise which call 'then' *
660660
ecma_value_t on_rejected, /**< on_rejected function */
661661
ecma_value_t result_capability) /**< promise capability */
662662
{
663-
ecma_string_t *capability_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_CAPABILITY);
664-
ecma_string_t *handler_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_HANDLER);
665-
ecma_string_t *promise_str_p = ecma_get_ecma_string_from_uint32 (ECMA_PROMISE_PROPERTY_PROMISE);
663+
ecma_string_t *capability_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY);
664+
ecma_string_t *handler_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_HANDLER);
665+
ecma_string_t *promise_str_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE);
666666

667667
/* 3. boolean true indicates "indentity" */
668668
if (!ecma_op_is_callable (on_fulfilled))

jerry-core/ecma/operations/ecma-promise-object.h

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -68,23 +68,6 @@ typedef struct
6868
ecma_collection_header_t *reject_reactions; /**< list of PromiseRejectReactions */
6969
} ecma_promise_object_t;
7070

71-
/**
72-
* Use symbolic constant to represent the internal property name of
73-
* promise related structures.
74-
*/
75-
typedef enum
76-
{
77-
ECMA_PROMISE_PROPERTY_PROMISE, /**< [[Promise]] property */
78-
ECMA_PROMISE_PROPERTY_RESOLVE, /**< [[Resolve]] property */
79-
ECMA_PROMISE_PROPERTY_REJECT, /**< [[Reject]] property */
80-
ECMA_PROMISE_PROPERTY_CAPABILITY, /**< [[Capability]] property */
81-
ECMA_PROMISE_PROPERTY_HANDLER, /**< [[Handler]] property */
82-
ECMA_PROMISE_PROPERTY_ALREADY_CALLED, /**< [[AlreadyCalled]] property */
83-
ECMA_PROMISE_PROPERTY_INDEX, /**< [[Index]] property */
84-
ECMA_PROMISE_PROPERTY_VALUE, /**< [[Values]] property */
85-
ECMA_PROMISE_PROPERTY_REMAINING_ELEMENT /**< [[RemainingElement]] property */
86-
} ecma_promise_property_symbolic_constant_t;
87-
8871
bool ecma_is_promise (ecma_object_t *obj_p);
8972
ecma_value_t
9073
ecma_op_create_promise_object (ecma_value_t executor, ecma_promise_executor_type_t type);

jerry-core/lit/lit-magic-strings.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,20 @@ typedef enum
3737
LIT_INTERNAL_MAGIC_STRING_ALREADY_RESOLVED, /**< [[AlreadyResolved]] of promise reject or resolve functions */
3838
LIT_INTERNAL_MAGIC_STRING_RESOLVE_FUNCTION, /**< the resolve funtion of the promise object */
3939
LIT_INTERNAL_MAGIC_STRING_REJECT_FUNCTION, /**< the reject function of the promise object */
40+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_PROMISE, /**< [[Promise]] property */
41+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_RESOLVE, /**< [[Resolve]] property */
42+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REJECT, /**< [[Reject]] property */
43+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_CAPABILITY, /**< [[Capability]] property */
44+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_HANDLER, /**< [[Handler]] property */
45+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_ALREADY_CALLED, /**< [[AlreadyCalled]] property */
46+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_INDEX, /**< [[Index]] property */
47+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_VALUE, /**< [[Values]] property */
48+
LIT_INTERNAL_MAGIC_STRING_PROMISE_PROPERTY_REMAINING_ELEMENT, /**< [[RemainingElement]] property */
4049
LIT_GC_MARK_REQUIRED_MAGIC_STRING__COUNT, /**< number of internal magic strings which will be used as
4150
* property names, and their values need to be marked during gc. */
4251
LIT_INTERNAL_MAGIC_STRING_DELETED = LIT_GC_MARK_REQUIRED_MAGIC_STRING__COUNT, /**< special value for
4352
* deleted properties */
53+
4454
LIT_INTERNAL_MAGIC_STRING_NATIVE_POINTER, /**< native pointer info associated with an object */
4555
LIT_MAGIC_STRING__COUNT /**< number of magic strings */
4656
} lit_magic_string_id_t;

tests/jerry/fail/regression-test-issue-2465.js renamed to tests/jerry/es2015/regression-test-issue-2465.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,8 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
Object.prototype[1] = 0;
16-
Promise.all();
15+
var a = eval("Object.prototype[1] = 0;\
16+
Promise.all()")
17+
a.catch(function(err) {
18+
assert(err instanceof TypeError);
19+
});

tests/jerry/fail/regression-test-issue-2490-variant2.js renamed to tests/jerry/es2015/regression-test-issue-2489-original.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
Object.defineProperty(Object.prototype, 2, {});
16-
Promise.all([0]);
15+
// This test case should not throw an error anymore.
16+
Object.defineProperty(Object.prototype, 0, {'get': function() { throw $ }});
17+
Promise.all();
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright JS Foundation and other contributors, http://js.foundation
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
// Original issue
16+
Object.defineProperty(Object.prototype, 6, {});
17+
Promise.all([0]);
18+
19+
// Variant 2
20+
Object.defineProperty(Object.prototype, 2, {});
21+
Promise.all([0]);
22+
23+
// Variant 3
24+
Object.defineProperty(Object.prototype, 3, {});
25+
Promise.all([0]);
26+
27+
// Variant 4
28+
Object.defineProperty(Object.prototype, 4, {});
29+
Promise.all([0]);
30+
31+
// Variant 5
32+
Object.defineProperty(Object.prototype, 5, {});
33+
Promise.all([0]);
34+
35+
// Variant 7
36+
Object.defineProperty(Object.prototype, 7, {});
37+
Promise.all([0]);
38+
39+
// Variant 8
40+
Object.defineProperty(Object.prototype, 8, {});
41+
Promise.all([0]);

0 commit comments

Comments
 (0)