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 76b4cab

Browse filesBrowse files
addaleaxaduh95
authored andcommitted
src: bring permissions macros in line with general C/C++ standards
Specifically, avoid the hazard of unintentionally evaluating an argument multiple times during macro expansion, and do not assume the available of particular namespaces in the current scope. PR-URL: #60053 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
1 parent 2197097 commit 76b4cab
Copy full SHA for 76b4cab

File tree

Expand file treeCollapse file tree

2 files changed

+45
-7
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+45
-7
lines changed
Open diff view settings
Collapse file

‎src/node_report.cc‎

Copy file name to clipboardExpand all lines: src/node_report.cc
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ std::string TriggerNodeReport(Isolate* isolate,
854854
THROW_IF_INSUFFICIENT_PERMISSIONS(
855855
env,
856856
permission::PermissionScope::kFileSystemWrite,
857-
std::string_view(Environment::GetCwd(env->exec_path())),
857+
Environment::GetCwd(env->exec_path()),
858858
filename);
859859
}
860860
}
Collapse file

‎src/permission/permission.h‎

Copy file name to clipboardExpand all lines: src/permission/permission.h
+44-6Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,63 @@ class FSReqBase;
2727

2828
namespace permission {
2929

30-
#define THROW_IF_INSUFFICIENT_PERMISSIONS(env, perm_, resource_, ...) \
30+
#define THROW_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+
const auto 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
#define ASYNC_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+
const auto 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+
#define ERR_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+
const auto 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+
#define SET_INSUFFICIENT_PERMISSION_ERROR_CALLBACK(scope) \
77+
void InsufficientPermissionError(std::string_view resource) { \
78+
v8::HandleScope handle_scope(env()->isolate()); \
79+
v8::Context::Scope context_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
class Permission {
5088
public:
5189
Permission();

0 commit comments

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