@@ -18,6 +18,8 @@ namespace node {
1818using v8::Context;
1919using v8::FunctionCallbackInfo;
2020using v8::Local;
21+ using v8::MaybeLocal;
22+ using v8::NewStringType;
2123using v8::Object;
2224using v8::String;
2325using 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
133132void 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
141140void 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
150149void Permission::EnablePermissions () {
0 commit comments