Skip to content

Commit 342c324

Browse files
committed
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 90ff714 commit 342c324

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

src/permission/permission.cc

Lines 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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy