Skip to content

Commit

Permalink
bootstrap: make Buffer and process non-enumerable
Browse files Browse the repository at this point in the history
This makes sure these two properties are non-enumerable. This aligns
them with all other globals that are not enumerable by spec.

Refs: nodejs#20565

PR-URL: nodejs#24874
Refs: nodejs#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>
  • Loading branch information
BridgeAR authored and refack committed Jan 10, 2019
1 parent 657ede7 commit 9843177
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
14 changes: 12 additions & 2 deletions lib/internal/bootstrap/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
}
Expand Down
2 changes: 0 additions & 2 deletions test/common/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -217,12 +217,10 @@ function platformTimeout(ms) {
}

let knownGlobals = [
Buffer,
clearImmediate,
clearInterval,
clearTimeout,
global,
process,
setImmediate,
setInterval,
setTimeout
Expand Down
35 changes: 35 additions & 0 deletions test/parallel/test-global.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand Down

0 comments on commit 9843177

Please sign in to comment.