There was an error while loading. Please reload this page.
1 parent 2699fe4 commit 92a3dc3Copy full SHA for 92a3dc3
2 files changed
src/node_binding.cc
@@ -5,6 +5,7 @@
5
#include "node_errors.h"
6
#include "node_external_reference.h"
7
#include "node_url_pattern.h"
8
+#include "permission/permission.h"
9
#include "util.h"
10
11
#include <string>
@@ -449,6 +450,8 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) {
449
450
return THROW_ERR_DLOPEN_DISABLED(
451
env, "Cannot load native addon because loading addons is disabled.");
452
}
453
+ THROW_IF_INSUFFICIENT_PERMISSIONS(
454
+ env, permission::PermissionScope::kAddon, "");
455
456
auto context = env->context();
457
test/parallel/test-permission-drop-addons.js
@@ -0,0 +1,38 @@
1
+// Flags: --permission --allow-addons --allow-fs-read=*
2
+'use strict';
3
+
4
+const common = require('../common');
+const { isMainThread } = require('worker_threads');
+if (!isMainThread) {
+ common.skip('This test only works on a main thread');
+}
+const assert = require('assert');
12
13
+let bindingPath;
14
+try {
15
+ bindingPath = require.resolve(
16
+ `../addons/hello-world/build/${common.buildType}/binding`);
17
+} catch (err) {
18
+ if (err.code !== 'MODULE_NOT_FOUND') {
19
+ throw err;
20
+ }
21
+ common.skip('addon not found');
22
23
24
+function openAddon() {
25
+ process.dlopen({ exports: {} }, bindingPath);
26
27
28
+assert.ok(process.permission.has('addon'));
29
+openAddon();
30
31
+process.permission.drop('addon');
32
+assert.ok(!process.permission.has('addon'));
33
+assert.throws(() => {
34
+ openAddon();
35
+}, common.expectsError({
36
+ code: 'ERR_ACCESS_DENIED',
37
+ permission: 'Addon',
38
+}));
0 commit comments