From d4dd0665f53e8636f9e7fbcac6a1072fe0a6cc36 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 25 Jan 2018 04:55:52 +0800 Subject: [PATCH] module: validate request in require.resolve PR-URL: https://github.com/nodejs/node/pull/18359 Fixes: https://github.com/nodejs/node/issues/18352 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- lib/internal/module.js | 6 ++++++ test/parallel/test-require-resolve.js | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/internal/module.js b/lib/internal/module.js index d2140411552..5fa77a11126 100644 --- a/lib/internal/module.js +++ b/lib/internal/module.js @@ -1,5 +1,7 @@ 'use strict'; +const errors = require('internal/errors'); + // Invoke with makeRequireFunction(module) where |module| is the Module object // to use as the context for the require() function. function makeRequireFunction(mod) { @@ -15,6 +17,10 @@ function makeRequireFunction(mod) { } function resolve(request, options) { + if (typeof request !== 'string') { + throw new errors.Error('ERR_INVALID_ARG_TYPE', + 'request', 'string', request); + } return Module._resolveFilename(request, mod, false, options); } diff --git a/test/parallel/test-require-resolve.js b/test/parallel/test-require-resolve.js index 4fbf697faf5..a2bc05ada4d 100644 --- a/test/parallel/test-require-resolve.js +++ b/test/parallel/test-require-resolve.js @@ -20,7 +20,7 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. 'use strict'; -require('../common'); +const common = require('../common'); const fixtures = require('../common/fixtures'); const assert = require('assert'); @@ -38,3 +38,13 @@ assert.strictEqual('path', require.resolve('path')); // Test configurable resolve() paths. require(fixtures.path('require-resolve.js')); require(fixtures.path('resolve-paths', 'default', 'verify-paths.js')); + +const re = /^The "request" argument must be of type string\. Received type \w+$/; +[1, false, null, undefined, {}].forEach((value) => { + common.expectsError( + () => { require.resolve(value); }, + { + code: 'ERR_INVALID_ARG_TYPE', + message: re + }); +});