diff --git a/src/api/encoding.cc b/src/api/encoding.cc index 52f41980507bcb..215db8882bf1ee 100644 --- a/src/api/encoding.cc +++ b/src/api/encoding.cc @@ -144,7 +144,7 @@ MaybeLocal TryEncode(Isolate* isolate, } MaybeLocal TryEncode(Isolate* isolate, const uint16_t* buf, size_t len) { - return StringBytes::Encode(isolate, buf, len).ToLocalChecked(); + return StringBytes::Encode(isolate, buf, len); } Local Encode(Isolate* isolate, diff --git a/src/api/environment.cc b/src/api/environment.cc index af5c62f64542a0..b9d619b2abfc85 100644 --- a/src/api/environment.cc +++ b/src/api/environment.cc @@ -539,8 +539,11 @@ MaybeLocal LoadEnvironment(Environment* env, return LoadEnvironment( env, [&](const StartExecutionCallbackInfo& info) -> MaybeLocal { - Local main_script = - ToV8Value(env->context(), main_script_source_utf8).ToLocalChecked(); + Local main_script; + if (!ToV8Value(env->context(), main_script_source_utf8) + .ToLocal(&main_script)) { + return {}; + } return info.run_cjs->Call( env->context(), Null(env->isolate()), 1, &main_script); }, diff --git a/src/js_stream.cc b/src/js_stream.cc index 55cbdf5bf2b0a3..cf04e5ef757593 100644 --- a/src/js_stream.cc +++ b/src/js_stream.cc @@ -117,10 +117,13 @@ int JSStream::DoWrite(WriteWrap* w, HandleScope scope(env()->isolate()); Context::Scope context_scope(env()->context()); + int value_int = UV_EPROTO; + MaybeStackBuffer, 16> bufs_arr(count); for (size_t i = 0; i < count; i++) { - bufs_arr[i] = - Buffer::Copy(env(), bufs[i].base, bufs[i].len).ToLocalChecked(); + if (!Buffer::Copy(env(), bufs[i].base, bufs[i].len).ToLocal(&bufs_arr[i])) { + return value_int; + } } Local argv[] = { @@ -130,7 +133,6 @@ int JSStream::DoWrite(WriteWrap* w, TryCatchScope try_catch(env()); Local value; - int value_int = UV_EPROTO; if (!MakeCallback(env()->onwrite_string(), arraysize(argv), argv).ToLocal(&value) || diff --git a/src/js_udp_wrap.cc b/src/js_udp_wrap.cc index a4f183025df4be..51e4f8c45ffd38 100644 --- a/src/js_udp_wrap.cc +++ b/src/js_udp_wrap.cc @@ -99,8 +99,9 @@ ssize_t JSUDPWrap::Send(uv_buf_t* bufs, MaybeStackBuffer, 16> buffers(nbufs); for (size_t i = 0; i < nbufs; i++) { - buffers[i] = Buffer::Copy(env(), bufs[i].base, bufs[i].len) - .ToLocalChecked(); + if (!Buffer::Copy(env(), bufs[i].base, bufs[i].len).ToLocal(&buffers[i])) { + return value_int; + } total_len += bufs[i].len; } diff --git a/src/node_contextify.cc b/src/node_contextify.cc index af05a2ca3e9208..f6b33097735b2a 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -1363,7 +1363,12 @@ bool ContextifyScript::EvalMachine(Local context, return false; } - args.GetReturnValue().Set(result.ToLocalChecked()); + // We checked for res being empty previously so this is a bit redundant + // but still safer than using ToLocalChecked. + Local res; + if (!result.ToLocal(&res)) return false; + + args.GetReturnValue().Set(res); return true; } diff --git a/src/node_http_common.h b/src/node_http_common.h index b58e8cb5607aba..e2e13e9972f9ce 100644 --- a/src/node_http_common.h +++ b/src/node_http_common.h @@ -414,8 +414,11 @@ class NgRcBufPointer : public MemoryRetainer { const char* header_name = reinterpret_cast(ptr.data()); v8::Eternal& eternal = static_str_map[header_name]; if (eternal.IsEmpty()) { - v8::Local str = - GetInternalizedString(env, ptr).ToLocalChecked(); + v8::Local str; + if (!GetInternalizedString(env, ptr).ToLocal(&str)) { + ptr.reset(); + return {}; + } eternal.Set(env->isolate(), str); return str; } diff --git a/src/pipe_wrap.cc b/src/pipe_wrap.cc index 38a08432616e9b..2cb61215604047 100644 --- a/src/pipe_wrap.cc +++ b/src/pipe_wrap.cc @@ -53,10 +53,12 @@ MaybeLocal PipeWrap::Instantiate(Environment* env, EscapableHandleScope handle_scope(env->isolate()); AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent); CHECK_EQ(false, env->pipe_constructor_template().IsEmpty()); - Local constructor = env->pipe_constructor_template() - ->GetFunction(env->context()) - .ToLocalChecked(); - CHECK_EQ(false, constructor.IsEmpty()); + Local constructor; + if (!env->pipe_constructor_template() + ->GetFunction(env->context()) + .ToLocal(&constructor)) { + return {}; + } Local type_value = Int32::New(env->isolate(), type); return handle_scope.EscapeMaybe( constructor->NewInstance(env->context(), 1, &type_value)); diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index 7b38b51d381cc1..72e2843636ca3b 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -59,10 +59,12 @@ MaybeLocal TCPWrap::Instantiate(Environment* env, EscapableHandleScope handle_scope(env->isolate()); AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(parent); CHECK_EQ(env->tcp_constructor_template().IsEmpty(), false); - Local constructor = env->tcp_constructor_template() - ->GetFunction(env->context()) - .ToLocalChecked(); - CHECK_EQ(constructor.IsEmpty(), false); + Local constructor; + if (!env->tcp_constructor_template() + ->GetFunction(env->context()) + .ToLocal(&constructor)) { + return {}; + } Local type_value = Int32::New(env->isolate(), type); return handle_scope.EscapeMaybe( constructor->NewInstance(env->context(), 1, &type_value)); diff --git a/src/util.cc b/src/util.cc index 17afbec8be3b3c..c8b468443c23b3 100644 --- a/src/util.cc +++ b/src/util.cc @@ -811,8 +811,11 @@ v8::Maybe GetValidatedFd(Environment* env, const bool is_out_of_range = fd < 0 || fd > INT32_MAX; if (is_out_of_range || !IsSafeJsInt(input)) { - Utf8Value utf8_value( - env->isolate(), input->ToDetailString(env->context()).ToLocalChecked()); + Local str; + if (!input->ToDetailString(env->context()).ToLocal(&str)) { + return v8::Nothing(); + } + Utf8Value utf8_value(env->isolate(), str); if (is_out_of_range && !std::isinf(fd)) { THROW_ERR_OUT_OF_RANGE(env, "The value of \"fd\" is out of range. "