Skip to content

Commit

Permalink
Fixes #4622
Browse files Browse the repository at this point in the history
  • Loading branch information
Jarred-Sumner committed Sep 15, 2023
1 parent f2a8575 commit 51f506d
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions src/bun.js/bindings/napi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,10 @@ static void defineNapiProperty(Zig::GlobalObject* globalObject, JSC::JSObject* t
extern "C" napi_status napi_set_property(napi_env env, napi_value target,
napi_value key, napi_value value)
{
if (UNLIKELY(!env || !target || !key)) {
return napi_invalid_arg;
}

auto globalObject = toJS(env);
auto& vm = globalObject->vm();
auto* object = toJS(target).getObject();
Expand All @@ -327,7 +331,8 @@ extern "C" napi_status napi_set_property(napi_env env, napi_value target,
auto keyProp = toJS(key);

auto scope = DECLARE_CATCH_SCOPE(vm);
object->putDirect(globalObject->vm(), keyProp.toPropertyKey(globalObject), toJS(value));
PutPropertySlot slot(object, true);
object->put(object, globalObject, keyProp.toPropertyKey(globalObject), toJS(value), slot);
RETURN_IF_EXCEPTION(scope, napi_generic_failure);

scope.clearException();
Expand All @@ -336,6 +341,10 @@ extern "C" napi_status napi_set_property(napi_env env, napi_value target,
extern "C" napi_status napi_has_property(napi_env env, napi_value object,
napi_value key, bool* result)
{
if (UNLIKELY(!object || !env)) {
return napi_invalid_arg;
}

auto globalObject = toJS(env);
auto& vm = globalObject->vm();
auto* target = toJS(object).getObject();
Expand All @@ -345,8 +354,7 @@ extern "C" napi_status napi_has_property(napi_env env, napi_value object,

auto keyProp = toJS(key);
auto scope = DECLARE_CATCH_SCOPE(vm);
// TODO: use the slot directly?
*result = !!target->getIfPropertyExists(globalObject, keyProp.toPropertyKey(globalObject));
*result = target->hasProperty(globalObject, keyProp.toPropertyKey(globalObject));
RETURN_IF_EXCEPTION(scope, napi_generic_failure);

scope.clearException();
Expand Down Expand Up @@ -1557,15 +1565,15 @@ extern "C" napi_status napi_define_class(napi_env env,
extern "C" napi_status napi_coerce_to_string(napi_env env, napi_value value,
napi_value* result)
{
if (UNLIKELY(result == nullptr)) {
if (UNLIKELY(result == nullptr || value == nullptr || env == nullptr)) {
return napi_invalid_arg;
}

Zig::GlobalObject* globalObject = toJS(env);
JSC::VM& vm = globalObject->vm();

auto scope = DECLARE_CATCH_SCOPE(vm);
JSC::JSValue jsValue = JSC::JSValue::decode(reinterpret_cast<JSC::EncodedJSValue>(value));
auto scope = DECLARE_THROW_SCOPE(vm);
JSC::JSValue jsValue = toJS(value);
JSC::EnsureStillAliveScope ensureStillAlive(jsValue);

// .toString() can throw
Expand Down Expand Up @@ -1717,7 +1725,7 @@ extern "C" napi_status napi_get_element(napi_env env, napi_value objectValue,
uint32_t index, napi_value* result)
{
JSValue jsValue = toJS(objectValue);
if (!jsValue || !jsValue.isObject()) {
if (UNLIKELY(!env || !jsValue || !jsValue.isObject())) {
return napi_invalid_arg;
}

Expand All @@ -1737,7 +1745,7 @@ extern "C" napi_status napi_get_element(napi_env env, napi_value objectValue,
extern "C" napi_status napi_create_object(napi_env env, napi_value* result)
{

if (UNLIKELY(result == nullptr)) {
if (UNLIKELY(result == nullptr || env == nullptr)) {
return napi_invalid_arg;
}

Expand Down

0 comments on commit 51f506d

Please sign in to comment.