diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2018-12-06 00:17:44 +0100 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2018-12-13 15:16:52 +0100 |
commit | c992639fbdc61fa78dc407ac09f633b102c55925 (patch) | |
tree | af37d2441e5d907b8dbb7e2680be199cb520dff8 | |
parent | a3801e96835821b71dd97b3f8513c56814bcf8fa (diff) | |
download | android-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.js | 14 | ||||
-rw-r--r-- | test/common/index.js | 2 | ||||
-rw-r--r-- | test/parallel/test-global.js | 35 |
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'); |