Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit be8e2b4

Browse filesBrowse files
jasnelltargos
authored andcommitted
src: improve error handling in permission.cc
PR-URL: #56904 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Xuguang Mei <meixuguang@gmail.com>
1 parent d6cf091 commit be8e2b4
Copy full SHA for be8e2b4

File tree

Expand file treeCollapse file tree

1 file changed

+21
-18
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+21
-18
lines changed
Open diff view settings
Collapse file

‎src/permission/permission.cc‎

Copy file name to clipboardExpand all lines: src/permission/permission.cc
+21-18Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ namespace node {
1717

1818
using v8::Context;
1919
using v8::FunctionCallbackInfo;
20+
using v8::IntegrityLevel;
2021
using v8::Local;
2122
using v8::MaybeLocal;
22-
using v8::NewStringType;
2323
using v8::Object;
2424
using v8::String;
2525
using v8::Value;
@@ -32,10 +32,9 @@ namespace {
3232
// permission.has('fs.in')
3333
static void Has(const FunctionCallbackInfo<Value>& args) {
3434
Environment* env = Environment::GetCurrent(args);
35-
v8::Isolate* isolate = env->isolate();
3635
CHECK(args[0]->IsString());
3736

38-
String::Utf8Value utf8_deny_scope(isolate, args[0]);
37+
String::Utf8Value utf8_deny_scope(env->isolate(), args[0]);
3938
if (*utf8_deny_scope == nullptr) {
4039
return;
4140
}
@@ -47,7 +46,7 @@ static void Has(const FunctionCallbackInfo<Value>& args) {
4746
}
4847

4948
if (args.Length() > 1 && !args[1]->IsUndefined()) {
50-
String::Utf8Value utf8_arg(isolate, args[1]);
49+
String::Utf8Value utf8_arg(env->isolate(), args[1]);
5150
if (*utf8_arg == nullptr) {
5251
return;
5352
}
@@ -111,14 +110,12 @@ MaybeLocal<Value> CreateAccessDeniedError(Environment* env,
111110
PermissionScope perm,
112111
const std::string_view& res) {
113112
Local<Object> err = ERR_ACCESS_DENIED(env->isolate());
114-
Local<String> perm_string;
115-
Local<String> resource_string;
116-
if (!String::NewFromUtf8(env->isolate(),
117-
Permission::PermissionToString(perm),
118-
NewStringType::kNormal)
113+
Local<Value> perm_string;
114+
Local<Value> resource_string;
115+
std::string_view perm_str = Permission::PermissionToString(perm);
116+
if (!ToV8Value(env->context(), perm_str, env->isolate())
119117
.ToLocal(&perm_string) ||
120-
!String::NewFromUtf8(
121-
env->isolate(), std::string(res).c_str(), NewStringType::kNormal)
118+
!ToV8Value(env->context(), res, env->isolate())
122119
.ToLocal(&resource_string) ||
123120
err->Set(env->context(), env->permission_string(), perm_string)
124121
.IsNothing() ||
@@ -132,18 +129,24 @@ MaybeLocal<Value> CreateAccessDeniedError(Environment* env,
132129
void Permission::ThrowAccessDenied(Environment* env,
133130
PermissionScope perm,
134131
const std::string_view& res) {
135-
MaybeLocal<Value> err = CreateAccessDeniedError(env, perm, res);
136-
if (err.IsEmpty()) return;
137-
env->isolate()->ThrowException(err.ToLocalChecked());
132+
Local<Value> err;
133+
if (CreateAccessDeniedError(env, perm, res).ToLocal(&err)) {
134+
env->isolate()->ThrowException(err);
135+
}
136+
// If ToLocal returned false, then v8 will have scheduled a
137+
// superseding error to be thrown.
138138
}
139139

140140
void Permission::AsyncThrowAccessDenied(Environment* env,
141141
fs::FSReqBase* req_wrap,
142142
PermissionScope perm,
143143
const std::string_view& res) {
144-
MaybeLocal<Value> err = CreateAccessDeniedError(env, perm, res);
145-
if (err.IsEmpty()) return;
146-
return req_wrap->Reject(err.ToLocalChecked());
144+
Local<Value> err;
145+
if (CreateAccessDeniedError(env, perm, res).ToLocal(&err)) {
146+
return req_wrap->Reject(err);
147+
}
148+
// If ToLocal returned false, then v8 will have scheduled a
149+
// superseding error to be thrown.
147150
}
148151

149152
void Permission::EnablePermissions() {
@@ -167,7 +170,7 @@ void Initialize(Local<Object> target,
167170
void* priv) {
168171
SetMethodNoSideEffect(context, target, "has", Has);
169172

170-
target->SetIntegrityLevel(context, v8::IntegrityLevel::kFrozen).FromJust();
173+
target->SetIntegrityLevel(context, IntegrityLevel::kFrozen).FromJust();
171174
}
172175

173176
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.