mirror of https://github.com/lukechilds/node.git
Browse Source
The `p < nmLen` condition will fail when a module's name is end with `node_modules` like `foo_node_modules`. The old logic will miss the `foo_node_modules/node_modules` in node_modules paths. TL;TR, a module named like `foo_node_modules` can't require any module in the node_modules folder. Fixes: https://github.com/nodejs/node/issues/6679 PR-URL: https://github.com/nodejs/node/pull/6670 Reviewed-By: Evan Lucas <evanlucas@me.com>v6.x
hefangshi
9 years ago
committed by
cjihrig
2 changed files with 119 additions and 19 deletions
@ -1,20 +1,105 @@ |
|||||
'use strict'; |
'use strict'; |
||||
var common = require('../common'); |
|
||||
var assert = require('assert'); |
|
||||
|
|
||||
var module = require('module'); |
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const _module = require('module'); |
||||
|
|
||||
var file, delimiter, paths; |
const cases = { |
||||
|
'WIN': [{ |
||||
|
file: 'C:\\Users\\hefangshi\\AppData\\Roaming\ |
||||
|
\\npm\\node_modules\\npm\\node_modules\\minimatch', |
||||
|
expect: [ |
||||
|
'C:\\Users\\hefangshi\\AppData\\Roaming\ |
||||
|
\\npm\\node_modules\\npm\\node_modules\\minimatch\\node_modules', |
||||
|
'C:\\Users\\hefangshi\\AppData\\Roaming\ |
||||
|
\\npm\\node_modules\\npm\\node_modules', |
||||
|
'C:\\Users\\hefangshi\\AppData\\Roaming\\npm\\node_modules', |
||||
|
'C:\\Users\\hefangshi\\AppData\\Roaming\\node_modules', |
||||
|
'C:\\Users\\hefangshi\\AppData\\node_modules', |
||||
|
'C:\\Users\\hefangshi\\node_modules', |
||||
|
'C:\\Users\\node_modules', |
||||
|
'C:\\node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo', |
||||
|
expect: [ |
||||
|
'C:\\Users\\Rocko Artischocko\\node_stuff\\foo\\node_modules', |
||||
|
'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules', |
||||
|
'C:\\Users\\Rocko Artischocko\\node_modules', |
||||
|
'C:\\Users\\node_modules', |
||||
|
'C:\\node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo_node_modules', |
||||
|
expect: [ |
||||
|
'C:\\Users\\Rocko \ |
||||
|
Artischocko\\node_stuff\\foo_node_modules\\node_modules', |
||||
|
'C:\\Users\\Rocko Artischocko\\node_stuff\\node_modules', |
||||
|
'C:\\Users\\Rocko Artischocko\\node_modules', |
||||
|
'C:\\Users\\node_modules', |
||||
|
'C:\\node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: 'C:\\node_modules', |
||||
|
expect: [ |
||||
|
'C:\\node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: 'C:\\', |
||||
|
expect: [ |
||||
|
'C:\\node_modules' |
||||
|
] |
||||
|
}], |
||||
|
'POSIX': [{ |
||||
|
file: '/usr/lib/node_modules/npm/node_modules/\ |
||||
|
node-gyp/node_modules/glob/node_modules/minimatch', |
||||
|
expect: [ |
||||
|
'/usr/lib/node_modules/npm/node_modules/\ |
||||
|
node-gyp/node_modules/glob/node_modules/minimatch/node_modules', |
||||
|
'/usr/lib/node_modules/npm/node_modules/\ |
||||
|
node-gyp/node_modules/glob/node_modules', |
||||
|
'/usr/lib/node_modules/npm/node_modules/node-gyp/node_modules', |
||||
|
'/usr/lib/node_modules/npm/node_modules', |
||||
|
'/usr/lib/node_modules', |
||||
|
'/usr/node_modules', |
||||
|
'/node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: '/usr/test/lib/node_modules/npm/foo', |
||||
|
expect: [ |
||||
|
'/usr/test/lib/node_modules/npm/foo/node_modules', |
||||
|
'/usr/test/lib/node_modules/npm/node_modules', |
||||
|
'/usr/test/lib/node_modules', |
||||
|
'/usr/test/node_modules', |
||||
|
'/usr/node_modules', |
||||
|
'/node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: '/usr/test/lib/node_modules/npm/foo_node_modules', |
||||
|
expect: [ |
||||
|
'/usr/test/lib/node_modules/npm/foo_node_modules/node_modules', |
||||
|
'/usr/test/lib/node_modules/npm/node_modules', |
||||
|
'/usr/test/lib/node_modules', |
||||
|
'/usr/test/node_modules', |
||||
|
'/usr/node_modules', |
||||
|
'/node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: '/node_modules', |
||||
|
expect: [ |
||||
|
'/node_modules' |
||||
|
] |
||||
|
}, { |
||||
|
file: '/', |
||||
|
expect: [ |
||||
|
'/node_modules' |
||||
|
] |
||||
|
}] |
||||
|
}; |
||||
|
|
||||
if (common.isWindows) { |
const platformCases = common.isWindows ? cases.WIN : cases.POSIX; |
||||
file = 'C:\\Users\\Rocko Artischocko\\node_stuff\\foo'; |
platformCases.forEach((c) => { |
||||
delimiter = '\\'; |
const paths = _module._nodeModulePaths(c.file); |
||||
} else { |
assert.deepStrictEqual(c.expect, paths, 'case ' + c.file + |
||||
file = '/usr/test/lib/node_modules/npm/foo'; |
' failed, actual paths is ' + JSON.stringify(paths)); |
||||
delimiter = '/'; |
}); |
||||
} |
|
||||
|
|
||||
paths = module._nodeModulePaths(file); |
|
||||
|
|
||||
assert.ok(paths.indexOf(file + delimiter + 'node_modules') !== -1); |
|
||||
assert.ok(Array.isArray(paths)); |
|
||||
|
Loading…
Reference in new issue