summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2018-12-06 00:17:44 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2018-12-13 15:16:52 +0100
commitc992639fbdc61fa78dc407ac09f633b102c55925 (patch)
treeaf37d2441e5d907b8dbb7e2680be199cb520dff8
parenta3801e96835821b71dd97b3f8513c56814bcf8fa (diff)
downloadandroid-node-v8-c992639fbdc61fa78dc407ac09f633b102c55925.tar.gz
android-node-v8-c992639fbdc61fa78dc407ac09f633b102c55925.tar.bz2
android-node-v8-c992639fbdc61fa78dc407ac09f633b102c55925.zip
bootstrap: make Buffer and process non-enumerable
This makes sure these two properties are non-enumerable. This aligns them with all other globals that are not enumerable by spec. Refs: https://github.com/nodejs/node/issues/20565 PR-URL: https://github.com/nodejs/node/pull/24874 Refs: https://github.com/nodejs/node/issues/20565 Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
-rw-r--r--lib/internal/bootstrap/node.js14
-rw-r--r--test/common/index.js2
-rw-r--r--test/parallel/test-global.js35
3 files changed, 47 insertions, 4 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index b537e62fe9..31ab0f986c 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -408,7 +408,12 @@ function setupGlobalVariables() {
enumerable: false,
configurable: true
});
- global.process = process;
+ Object.defineProperty(global, 'process', {
+ value: process,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ });
const util = NativeModule.require('util');
function makeGetter(name) {
@@ -445,7 +450,12 @@ function setupGlobalVariables() {
// and exposes it on `internal/buffer`.
NativeModule.require('internal/buffer');
- global.Buffer = NativeModule.require('buffer').Buffer;
+ Object.defineProperty(global, 'Buffer', {
+ value: NativeModule.require('buffer').Buffer,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ });
process.domain = null;
process._exiting = false;
}
diff --git a/test/common/index.js b/test/common/index.js
index 3d7a0187ee..cd0696c677 100644
--- a/test/common/index.js
+++ b/test/common/index.js
@@ -217,12 +217,10 @@ function platformTimeout(ms) {
}
let knownGlobals = [
- Buffer,
clearImmediate,
clearInterval,
clearTimeout,
global,
- process,
setImmediate,
setInterval,
setTimeout
diff --git a/test/parallel/test-global.js b/test/parallel/test-global.js
index b139a62874..e8112531fc 100644
--- a/test/parallel/test-global.js
+++ b/test/parallel/test-global.js
@@ -27,6 +27,41 @@ const common = require('../common');
const fixtures = require('../common/fixtures');
const assert = require('assert');
+const { builtinModules } = require('module');
+
+// Load all modules to actually cover most code parts.
+builtinModules.forEach((moduleName) => {
+ if (!moduleName.includes('/')) {
+ try {
+ // This could throw for e.g., crypto if the binary is not compiled
+ // accordingly.
+ require(moduleName);
+ } catch {}
+ }
+});
+
+{
+ const expected = [
+ 'global',
+ 'clearImmediate',
+ 'clearInterval',
+ 'clearTimeout',
+ 'setImmediate',
+ 'setInterval',
+ 'setTimeout'
+ ];
+ if (global.DTRACE_HTTP_SERVER_RESPONSE) {
+ expected.unshift(
+ 'DTRACE_HTTP_SERVER_RESPONSE',
+ 'DTRACE_HTTP_SERVER_REQUEST',
+ 'DTRACE_HTTP_CLIENT_RESPONSE',
+ 'DTRACE_HTTP_CLIENT_REQUEST',
+ 'DTRACE_NET_STREAM_END',
+ 'DTRACE_NET_SERVER_CONNECTION'
+ );
+ }
+ assert.deepStrictEqual(new Set(Object.keys(global)), new Set(expected));
+}
common.allowGlobals('bar', 'foo');