src: improve error handling in buffer and dotenv · nodejs/node@817f7d0 · GitHub
Skip to content

Commit 817f7d0

Browse files
jasnellRafaelGSS
authored andcommitted
src: improve error handling in buffer and dotenv
Replacing ToLocalChecked() PR-URL: #57189 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Robert Nagy <ronagy@icloud.com>
1 parent 11ef7f9 commit 817f7d0

5 files changed

Lines changed: 65 additions & 48 deletions

File tree

src/node_buffer.cc

Lines changed: 28 additions & 11 deletions

src/node_dotenv.cc

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@
66

77
namespace node {
88

9+
using v8::EscapableHandleScope;
10+
using v8::JustVoid;
911
using v8::Local;
10-
using v8::NewStringType;
12+
using v8::Maybe;
13+
using v8::MaybeLocal;
14+
using v8::Nothing;
1115
using v8::Object;
1216
using v8::String;
17+
using v8::Value;
1318

1419
std::vector<Dotenv::env_file_data> Dotenv::GetDataFromArgs(
1520
const std::vector<std::string>& args) {
@@ -59,50 +64,42 @@ std::vector<Dotenv::env_file_data> Dotenv::GetDataFromArgs(
5964
return env_files;
6065
}
6166

62-
void Dotenv::SetEnvironment(node::Environment* env) {
63-
auto isolate = env->isolate();
67+
Maybe<void> Dotenv::SetEnvironment(node::Environment* env) {
68+
Local<Value> name;
69+
Local<Value> val;
70+
auto context = env->context();
6471

6572
for (const auto& entry : store_) {
66-
auto key = entry.first;
67-
auto value = entry.second;
68-
69-
auto existing = env->env_vars()->Get(key.data());
70-
73+
auto existing = env->env_vars()->Get(entry.first.data());
7174
if (!existing.has_value()) {
72-
env->env_vars()->Set(
73-
isolate,
74-
v8::String::NewFromUtf8(
75-
isolate, key.data(), NewStringType::kNormal, key.size())
76-
.ToLocalChecked(),
77-
v8::String::NewFromUtf8(
78-
isolate, value.data(), NewStringType::kNormal, value.size())
79-
.ToLocalChecked());
75+
if (!ToV8Value(context, entry.first).ToLocal(&name) ||
76+
!ToV8Value(context, entry.second).ToLocal(&val)) {
77+
return Nothing<void>();
78+
}
79+
env->env_vars()->Set(env->isolate(), name.As<String>(), val.As<String>());
8080
}
8181
}
82+
83+
return JustVoid();
8284
}
8385

84-
Local<Object> Dotenv::ToObject(Environment* env) const {
86+
MaybeLocal<Object> Dotenv::ToObject(Environment* env) const {
87+
EscapableHandleScope scope(env->isolate());
8588
Local<Object> result = Object::New(env->isolate());
8689

90+
Local<Value> name;
91+
Local<Value> val;
92+
auto context = env->context();
93+
8794
for (const auto& entry : store_) {
88-
auto key = entry.first;
89-
auto value = entry.second;
90-
91-
result
92-
->Set(
93-
env->context(),
94-
v8::String::NewFromUtf8(
95-
env->isolate(), key.data(), NewStringType::kNormal, key.size())
96-
.ToLocalChecked(),
97-
v8::String::NewFromUtf8(env->isolate(),
98-
value.data(),
99-
NewStringType::kNormal,
100-
value.size())
101-
.ToLocalChecked())
102-
.Check();
95+
if (!ToV8Value(context, entry.first).ToLocal(&name) ||
96+
!ToV8Value(context, entry.second).ToLocal(&val) ||
97+
result->Set(context, name, val).IsNothing()) {
98+
return MaybeLocal<Object>();
99+
}
103100
}
104101

105-
return result;
102+
return scope.Escape(result);
106103
}
107104

108105
// Removes space characters (spaces, tabs and newlines) from

src/node_dotenv.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Dotenv {
2828
void ParseContent(const std::string_view content);
2929
ParseResult ParsePath(const std::string_view path);
3030
void AssignNodeOptionsIfAvailable(std::string* node_options) const;
31-
void SetEnvironment(Environment* env);
32-
v8::Local<v8::Object> ToObject(Environment* env) const;
31+
v8::Maybe<void> SetEnvironment(Environment* env);
32+
v8::MaybeLocal<v8::Object> ToObject(Environment* env) const;
3333

3434
static std::vector<env_file_data> GetDataFromArgs(
3535
const std::vector<std::string>& args);

src/node_process_methods.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ static void LoadEnvFile(const v8::FunctionCallbackInfo<v8::Value>& args) {
487487

488488
switch (dotenv.ParsePath(path)) {
489489
case dotenv.ParseResult::Valid: {
490-
dotenv.SetEnvironment(env);
490+
USE(dotenv.SetEnvironment(env));
491491
break;
492492
}
493493
case dotenv.ParseResult::InvalidContent: {

src/node_util.cc

Lines changed: 4 additions & 1 deletion

0 commit comments

Comments
 (0)