Skip to content

Commit 6b4ce53

Browse files
committed
Add some type checking (nodejs#195)
- Check the type before casting to string when creating error objects. - Return an error when napi_typeof does not find any valid type.
1 parent 1427b33 commit 6b4ce53

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/node_api.cc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,8 +1238,11 @@ napi_status napi_create_error(napi_env env,
12381238
NAPI_PREAMBLE(env);
12391239
CHECK_ARG(result);
12401240

1241+
v8::Local<v8::Value> message_value = v8impl::V8LocalValueFromJsValue(msg);
1242+
RETURN_STATUS_IF_FALSE(message_value->IsString(), napi_string_expected);
1243+
12411244
*result = v8impl::JsValueFromV8LocalValue(v8::Exception::Error(
1242-
v8impl::V8LocalValueFromJsValue(msg).As<v8::String>()));
1245+
message_value.As<v8::String>()));
12431246

12441247
return GET_RETURN_STATUS();
12451248
}
@@ -1250,8 +1253,11 @@ napi_status napi_create_type_error(napi_env env,
12501253
NAPI_PREAMBLE(env);
12511254
CHECK_ARG(result);
12521255

1256+
v8::Local<v8::Value> message_value = v8impl::V8LocalValueFromJsValue(msg);
1257+
RETURN_STATUS_IF_FALSE(message_value->IsString(), napi_string_expected);
1258+
12531259
*result = v8impl::JsValueFromV8LocalValue(v8::Exception::TypeError(
1254-
v8impl::V8LocalValueFromJsValue(msg).As<v8::String>()));
1260+
message_value.As<v8::String>()));
12551261

12561262
return GET_RETURN_STATUS();
12571263
}
@@ -1262,8 +1268,11 @@ napi_status napi_create_range_error(napi_env env,
12621268
NAPI_PREAMBLE(env);
12631269
CHECK_ARG(result);
12641270

1271+
v8::Local<v8::Value> message_value = v8impl::V8LocalValueFromJsValue(msg);
1272+
RETURN_STATUS_IF_FALSE(message_value->IsString(), napi_string_expected);
1273+
12651274
*result = v8impl::JsValueFromV8LocalValue(v8::Exception::RangeError(
1266-
v8impl::V8LocalValueFromJsValue(msg).As<v8::String>()));
1275+
message_value.As<v8::String>()));
12671276

12681277
return GET_RETURN_STATUS();
12691278
}
@@ -1298,7 +1307,8 @@ napi_status napi_typeof(napi_env env,
12981307
} else if (v->IsExternal()) {
12991308
*result = napi_external;
13001309
} else {
1301-
*result = napi_object; // Is this correct?
1310+
// Should not get here unless V8 has added some new kind of value.
1311+
return napi_set_last_error(napi_invalid_arg);
13021312
}
13031313

13041314
return napi_ok;

0 commit comments

Comments
 (0)