Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commit6417dc8

Browse files
addaleaxRafaelGSS
authored andcommitted
src: bring permissions macros in line with general C/C++ standards
Specifically, avoid the hazard of unintentionally evaluatingan argument multiple times during macro expansion, and do notassume the available of particular namespaces in the current scope.PR-URL:#60053Reviewed-By: James M Snell <jasnell@gmail.com>Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
1 parent04d568e commit6417dc8

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

‎src/node_report.cc‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ std::string TriggerNodeReport(Isolate* isolate,
859859
THROW_IF_INSUFFICIENT_PERMISSIONS(
860860
env,
861861
permission::PermissionScope::kFileSystemWrite,
862-
std::string_view(Environment::GetCwd(env->exec_path())),
862+
Environment::GetCwd(env->exec_path()),
863863
filename);
864864
}
865865
}

‎src/permission/permission.h‎

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,63 @@ class FSReqBase;
2727

2828
namespacepermission {
2929

30-
#defineTHROW_IF_INSUFFICIENT_PERMISSIONS(env,perm_, resource_, ...) \
30+
#defineTHROW_IF_INSUFFICIENT_PERMISSIONS(env,perm, resource, ...) \
3131
do { \
32-
if (!env->permission()->is_granted(env, perm_, resource_)) [[unlikely]] { \
32+
node::Environment* env__ = (env); \
33+
const node::permission::PermissionScope perm__ = (perm); \
34+
constauto resource__ = (resource); \
35+
if (!env__->permission()->is_granted(env__, perm__, resource__)) \
36+
[[unlikely]] { \
3337
node::permission::Permission::ThrowAccessDenied( \
34-
(env), perm_, resource_); \
38+
env__, perm__, resource__); \
3539
return __VA_ARGS__; \
3640
} \
3741
}while (0)
3842

3943
#defineASYNC_THROW_IF_INSUFFICIENT_PERMISSIONS( \
40-
env, wrap,perm_, resource_, ...) \
44+
env, wrap,perm, resource, ...) \
4145
do { \
42-
if (!env->permission()->is_granted(env, perm_, resource_)) [[unlikely]] { \
46+
node::Environment* env__ = (env); \
47+
const node::permission::PermissionScope perm__ = (perm); \
48+
constauto resource__ = (resource); \
49+
if (!env__->permission()->is_granted(env__, perm__, resource__)) \
50+
[[unlikely]] { \
4351
node::permission::Permission::AsyncThrowAccessDenied( \
44-
(env),wrap, perm_, resource_); \
52+
env__, (wrap), perm__, resource__); \
4553
return __VA_ARGS__; \
4654
} \
4755
}while (0)
4856

57+
#defineERR_ACCESS_DENIED_IF_INSUFFICIENT_PERMISSIONS( \
58+
env, perm, resource, args, ...) \
59+
do { \
60+
node::Environment* env__ = (env); \
61+
const node::permission::PermissionScope perm__ = (perm); \
62+
constauto resource__ = (resource); \
63+
if (!env__->permission()->is_granted(env__, perm__, resource__)) \
64+
[[unlikely]] { \
65+
Local<Value> err_access; \
66+
if (node::permission::CreateAccessDeniedError(env__, perm__, resource__) \
67+
.ToLocal(&err_access)) { \
68+
args.GetReturnValue().Set(err_access); \
69+
}else { \
70+
args.GetReturnValue().Set(UV_EACCES); \
71+
} \
72+
return __VA_ARGS__; \
73+
} \
74+
}while (0)
75+
76+
#defineSET_INSUFFICIENT_PERMISSION_ERROR_CALLBACK(scope) \
77+
voidInsufficientPermissionError(std::string_view resource) { \
78+
v8::HandleScopehandle_scope(env()->isolate()); \
79+
v8::Context::Scopecontext_scope(env()->context()); \
80+
v8::Local<v8::Value> arg; \
81+
if (!permission::CreateAccessDeniedError(env(), (scope), resource) \
82+
.ToLocal(&arg)) { \
83+
} \
84+
MakeCallback(env()->oncomplete_string(),1, &arg); \
85+
}
86+
4987
classPermission {
5088
public:
5189
Permission();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp