Browse Source

module: fix stat with long paths on Windows

PR-URL: https://github.com/nodejs/io.js/pull/2013
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
v2.3.1-release
Michaël Zasso 10 years ago
committed by Rod Vagg
parent
commit
a4f4909f3d
  1. 2
      lib/module.js
  2. 26
      test/parallel/test-require-long-path.js

2
lib/module.js

@ -143,7 +143,7 @@ Module._findPath = function(request, paths) {
// For each path // For each path
for (var i = 0, PL = paths.length; i < PL; i++) { for (var i = 0, PL = paths.length; i < PL; i++) {
// Don't search further if path doesn't exist // Don't search further if path doesn't exist
if (paths[i] && internalModuleStat(paths[i]) < 1) continue; if (paths[i] && internalModuleStat(path._makeLong(paths[i])) < 1) continue;
var basePath = path.resolve(paths[i], request); var basePath = path.resolve(paths[i], request);
var filename; var filename;

26
test/parallel/test-require-long-path.js

@ -1,17 +1,23 @@
'use strict'; 'use strict';
var common = require('../common'); const common = require('../common');
var fs = require('fs'); const fs = require('fs');
var path = require('path'); const path = require('path');
var assert = require('assert');
// make a path that is more than 260 chars long. // make a path that is more than 260 chars long.
var fileNameLen = Math.max(261 - common.tmpDir.length - 1, 1); const dirNameLen = Math.max(260 - common.tmpDir.length, 1);
var fileName = path.join(common.tmpDir, new Array(fileNameLen + 1).join('x')); const dirName = path.join(common.tmpDir, 'x'.repeat(dirNameLen));
var fullPath = path.resolve(fileName); const fullDirPath = path.resolve(dirName);
const indexFile = path.join(fullDirPath, 'index.js');
const otherFile = path.join(fullDirPath, 'other.js');
common.refreshTmpDir(); common.refreshTmpDir();
fs.writeFileSync(fullPath, 'module.exports = 42;');
assert.equal(require(fullPath), 42); fs.mkdirSync(fullDirPath);
fs.writeFileSync(indexFile, 'require("./other");');
fs.writeFileSync(otherFile, '');
require(indexFile);
require(otherFile);
fs.unlinkSync(fullPath); common.refreshTmpDir();

Loading…
Cancel
Save