diff options
author | Joyee Cheung <joyeec9h3@gmail.com> | 2019-03-06 12:54:12 +0100 |
---|---|---|
committer | Joyee Cheung <joyeec9h3@gmail.com> | 2019-03-08 13:57:38 +0100 |
commit | b05fd4baa87886674721101eaf38b75716037891 (patch) | |
tree | 944d9db74ba3b14a9d74f3be081cc1351c338bb9 /lib/internal/util/debuglog.js | |
parent | 687f30467b67db9f39334cd19faa484c20a4ab06 (diff) | |
download | android-node-v8-b05fd4baa87886674721101eaf38b75716037891.tar.gz android-node-v8-b05fd4baa87886674721101eaf38b75716037891.tar.bz2 android-node-v8-b05fd4baa87886674721101eaf38b75716037891.zip |
lib: explicitly initialize debuglog during bootstrap
This patch splits the implementation of util.debuglog into a
separate file and explicitly initialize it during pre-execution
since the initialization depends on environment variables.
Also delays the call to `debuglog` in modules that are loaded during
bootstrap to make sure we only access the environment variable
during pre-execution.
PR-URL: https://github.com/nodejs/node/pull/26468
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'lib/internal/util/debuglog.js')
-rw-r--r-- | lib/internal/util/debuglog.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/internal/util/debuglog.js b/lib/internal/util/debuglog.js new file mode 100644 index 0000000000..769328ac9d --- /dev/null +++ b/lib/internal/util/debuglog.js @@ -0,0 +1,54 @@ +'use strict'; + +const { format } = require('internal/util/inspect'); + +// `debugs` is deliberately initialized to undefined so any call to +// debuglog() before initializeDebugEnv() is called will throw. +let debugs; + +let debugEnvRegex = /^$/; + +// `debugEnv` is initial value of process.env.NODE_DEBUG +function initializeDebugEnv(debugEnv) { + debugs = {}; + if (debugEnv) { + debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&') + .replace(/\*/g, '.*') + .replace(/,/g, '$|^') + .toUpperCase(); + debugEnvRegex = new RegExp(`^${debugEnv}$`, 'i'); + } +} + +// Emits warning when user sets +// NODE_DEBUG=http or NODE_DEBUG=http2. +function emitWarningIfNeeded(set) { + if ('HTTP' === set || 'HTTP2' === set) { + process.emitWarning('Setting the NODE_DEBUG environment variable ' + + 'to \'' + set.toLowerCase() + '\' can expose sensitive ' + + 'data (such as passwords, tokens and authentication headers) ' + + 'in the resulting log.'); + } +} + +function debuglog(set) { + set = set.toUpperCase(); + if (!debugs[set]) { + if (debugEnvRegex.test(set)) { + const pid = process.pid; + emitWarningIfNeeded(set); + debugs[set] = function debug(...args) { + const msg = format(...args); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function debug() {}; + } + } + return debugs[set]; +} + +module.exports = { + debuglog, + initializeDebugEnv +}; |