Fix AsyncGenerator.prototype.return error handling (bnoordhuis)

This commit is contained in:
Fabrice Bellard
2023-12-13 19:01:10 +01:00
parent a610598df6
commit a42681a4a3
2 changed files with 13 additions and 8 deletions

View File

@@ -19175,10 +19175,19 @@ static int js_async_generator_completed_return(JSContext *ctx,
JSValue promise, resolving_funcs[2], resolving_funcs1[2];
int res;
promise = js_promise_resolve(ctx, ctx->promise_ctor,
1, (JSValueConst *)&value, 0);
if (JS_IsException(promise))
return -1;
// Can fail looking up JS_ATOM_constructor when is_reject==0.
promise = js_promise_resolve(ctx, ctx->promise_ctor, 1, &value,
/*is_reject*/0);
// A poisoned .constructor property is observable and the resulting
// exception should be delivered to the catch handler.
if (JS_IsException(promise)) {
JSValue err = JS_GetException(ctx);
promise = js_promise_resolve(ctx, ctx->promise_ctor, 1, &err,
/*is_reject*/1);
JS_FreeValue(ctx, err);
if (JS_IsException(promise))
return -1;
}
if (js_async_generator_resolve_function_create(ctx,
JS_MKPTR(JS_TAG_OBJECT, s->generator),
resolving_funcs1,