There was an error while loading. Please reload this page.
1 parent d4cafce commit c40d147Copy full SHA for c40d147
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>
@@ -448,6 +449,8 @@ void DLOpen(const FunctionCallbackInfo<Value>& args) {
448
449
return THROW_ERR_DLOPEN_DISABLED(
450
env, "Cannot load native addon because loading addons is disabled.");
451
}
452
+ THROW_IF_INSUFFICIENT_PERMISSIONS(
453
+ env, permission::PermissionScope::kAddon, "");
454
455
auto context = env->context();
456
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