Fix JS_HasException() when null is thrown (#313)

Use `JS_UNINITIALIZED` instead of `JS_NULL` when no exception is pending, so `null` can be thrown and distinguished from no exception pending.
This commit is contained in:
Kasper Isager Dalsgarð 2024-07-17 13:58:08 +02:00 committed by GitHub
parent b3715f7cb1
commit 5417ab0159
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1681,7 +1681,7 @@ JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque)
rt->stack_size = JS_DEFAULT_STACK_SIZE; rt->stack_size = JS_DEFAULT_STACK_SIZE;
JS_UpdateStackTop(rt); JS_UpdateStackTop(rt);
rt->current_exception = JS_NULL; rt->current_exception = JS_UNINITIALIZED;
return rt; return rt;
fail: fail:
@ -6398,13 +6398,13 @@ JSValue JS_GetException(JSContext *ctx)
JSValue val; JSValue val;
JSRuntime *rt = ctx->rt; JSRuntime *rt = ctx->rt;
val = rt->current_exception; val = rt->current_exception;
rt->current_exception = JS_NULL; rt->current_exception = JS_UNINITIALIZED;
return val; return val;
} }
JS_BOOL JS_HasException(JSContext *ctx) JS_BOOL JS_HasException(JSContext *ctx)
{ {
return !JS_IsNull(ctx->rt->current_exception); return !JS_IsUninitialized(ctx->rt->current_exception);
} }
static void dbuf_put_leb128(DynBuf *s, uint32_t v) static void dbuf_put_leb128(DynBuf *s, uint32_t v)
@ -15321,7 +15321,7 @@ static int JS_IteratorClose(JSContext *ctx, JSValueConst enum_obj,
if (is_exception_pending) { if (is_exception_pending) {
ex_obj = ctx->rt->current_exception; ex_obj = ctx->rt->current_exception;
ctx->rt->current_exception = JS_NULL; ctx->rt->current_exception = JS_UNINITIALIZED;
res = -1; res = -1;
} else { } else {
ex_obj = JS_UNDEFINED; ex_obj = JS_UNDEFINED;
@ -18674,7 +18674,7 @@ static JSValue JS_CallInternal(JSContext *caller_ctx, JSValueConst func_obj,
JS_IteratorClose(ctx, sp[-1], TRUE); JS_IteratorClose(ctx, sp[-1], TRUE);
} else { } else {
*sp++ = rt->current_exception; *sp++ = rt->current_exception;
rt->current_exception = JS_NULL; rt->current_exception = JS_UNINITIALIZED;
pc = b->byte_code_buf + pos; pc = b->byte_code_buf + pos;
goto restart; goto restart;
} }