diff options
author | Denys Otrishko <shishugi@gmail.com> | 2018-08-16 20:19:06 +0300 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2018-09-17 17:41:42 +0200 |
commit | 1b92214d097358040efb7d3ec5dff1736f364bc0 (patch) | |
tree | 109aa3737c39b7fe47403ecdf761175d248ad6fc /lib | |
parent | 3c2aa4b9f3a566c58d2958e96f239d59f509b50c (diff) | |
download | android-node-v8-1b92214d097358040efb7d3ec5dff1736f364bc0.tar.gz android-node-v8-1b92214d097358040efb7d3ec5dff1736f364bc0.tar.bz2 android-node-v8-1b92214d097358040efb7d3ec5dff1736f364bc0.zip |
module: fix inconsistency between load and _findPath
Files with multiple extensions are not handled by require-module system
therefore if you have file 'file.foo.bar' and require('./file') it won't
be found even while using require.extensions['foo.bar'] but before this
commit if you have require.extensions['foo.bar'] and
require.extensions['bar'] set then the latter will be called if you do
require('./file') but if you remove the former the former ('foo.bar')
property it will fail.
This commit makes it always fail in such cases.
Fixes: https://github.com/nodejs/node/issues/4778
PR-URL: https://github.com/nodejs/node/pull/22382
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/internal/modules/cjs/loader.js | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 3a983fd7bc..fba416d4db 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -217,6 +217,16 @@ function tryExtensions(p, exts, isMain) { return false; } +function readExtensions() { + const exts = Object.keys(Module._extensions); + for (var i = 0, j = 0; i < exts.length; ++i) { + if (path.extname(exts[i]) === '') + exts[j++] = exts[i]; + } + exts.length = j; + return exts; +} + var warned = false; Module._findPath = function(request, paths, isMain) { if (path.isAbsolute(request)) { @@ -273,7 +283,7 @@ Module._findPath = function(request, paths, isMain) { if (!filename) { // try it with each of the extensions if (exts === undefined) - exts = Object.keys(Module._extensions); + exts = readExtensions(); filename = tryExtensions(basePath, exts, isMain); } } @@ -281,7 +291,7 @@ Module._findPath = function(request, paths, isMain) { if (!filename && rc === 1) { // Directory. // try it with each of the extensions at "index" if (exts === undefined) - exts = Object.keys(Module._extensions); + exts = readExtensions(); filename = tryPackage(basePath, exts, isMain); if (!filename) { filename = tryExtensions(path.resolve(basePath, 'index'), exts, isMain); |