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 1ff3f63

Browse filesBrowse files
targosRafaelGSS
authored andcommitted
src: handle errors correctly in permission.cc
Return an empty `MaybeLocal` to indicate that an exception is pending. PR-URL: #54541 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
1 parent 4938188 commit 1ff3f63
Copy full SHA for 1ff3f63

File tree

Expand file treeCollapse file tree

1 file changed

+24
-25
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+24
-25
lines changed
Open diff view settings
Collapse file

‎src/permission/permission.cc‎

Copy file name to clipboardExpand all lines: src/permission/permission.cc
+24-25Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace node {
1818
using v8::Context;
1919
using v8::FunctionCallbackInfo;
2020
using v8::Local;
21+
using v8::MaybeLocal;
22+
using v8::NewStringType;
2123
using v8::Object;
2224
using v8::String;
2325
using v8::Value;
@@ -105,46 +107,43 @@ Permission::Permission() : enabled_(false) {
105107
#undef V
106108
}
107109

108-
Local<Value> CreateAccessDeniedError(Environment* env,
109-
PermissionScope perm,
110-
const std::string_view& res) {
111-
Local<Value> err = ERR_ACCESS_DENIED(env->isolate());
112-
CHECK(err->IsObject());
113-
if (err.As<Object>()
114-
->Set(env->context(),
115-
env->permission_string(),
116-
v8::String::NewFromUtf8(env->isolate(),
117-
Permission::PermissionToString(perm),
118-
v8::NewStringType::kNormal)
119-
.ToLocalChecked())
110+
MaybeLocal<Value> CreateAccessDeniedError(Environment* env,
111+
PermissionScope perm,
112+
const std::string_view& res) {
113+
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)
119+
.ToLocal(&perm_string) ||
120+
!String::NewFromUtf8(
121+
env->isolate(), std::string(res).c_str(), NewStringType::kNormal)
122+
.ToLocal(&resource_string) ||
123+
err->Set(env->context(), env->permission_string(), perm_string)
120124
.IsNothing() ||
121-
err.As<Object>()
122-
->Set(env->context(),
123-
env->resource_string(),
124-
v8::String::NewFromUtf8(env->isolate(),
125-
std::string(res).c_str(),
126-
v8::NewStringType::kNormal)
127-
.ToLocalChecked())
128-
.IsNothing())
129-
return Local<Value>();
125+
err->Set(env->context(), env->resource_string(), resource_string)
126+
.IsNothing()) {
127+
return MaybeLocal<Value>();
128+
}
130129
return err;
131130
}
132131

133132
void Permission::ThrowAccessDenied(Environment* env,
134133
PermissionScope perm,
135134
const std::string_view& res) {
136-
Local<Value> err = CreateAccessDeniedError(env, perm, res);
135+
MaybeLocal<Value> err = CreateAccessDeniedError(env, perm, res);
137136
if (err.IsEmpty()) return;
138-
env->isolate()->ThrowException(err);
137+
env->isolate()->ThrowException(err.ToLocalChecked());
139138
}
140139

141140
void Permission::AsyncThrowAccessDenied(Environment* env,
142141
fs::FSReqBase* req_wrap,
143142
PermissionScope perm,
144143
const std::string_view& res) {
145-
Local<Value> err = CreateAccessDeniedError(env, perm, res);
144+
MaybeLocal<Value> err = CreateAccessDeniedError(env, perm, res);
146145
if (err.IsEmpty()) return;
147-
return req_wrap->Reject(err);
146+
return req_wrap->Reject(err.ToLocalChecked());
148147
}
149148

150149
void Permission::EnablePermissions() {

0 commit comments

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