mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
module,win: fix long path resolve
Fixes: https://github.com/nodejs/node/issues/50753 PR-URL: https://github.com/nodejs/node/pull/51097 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
parent
6f504b71ac
commit
45f0dd0192
@ -272,8 +272,15 @@ void BindingData::ReadPackageJSON(const FunctionCallbackInfo<Value>& args) {
|
||||
permission::PermissionScope::kFileSystemRead,
|
||||
path.ToStringView());
|
||||
|
||||
// TODO(StefanStojanovic): Remove ifdef after
|
||||
// path.toNamespacedPath logic is ported to C++
|
||||
#ifdef _WIN32
|
||||
auto package_json = GetPackageJSON(
|
||||
realm, "\\\\?\\" + path.ToString(), is_esm ? &error_context : nullptr);
|
||||
#else
|
||||
auto package_json =
|
||||
GetPackageJSON(realm, path.ToString(), is_esm ? &error_context : nullptr);
|
||||
#endif
|
||||
if (package_json == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
42
test/es-module/test-GH-50753.js
Normal file
42
test/es-module/test-GH-50753.js
Normal file
@ -0,0 +1,42 @@
|
||||
'use strict';
|
||||
|
||||
// Flags: --expose-internals
|
||||
|
||||
const common = require('../common');
|
||||
if (!common.isWindows) {
|
||||
common.skip('this test is Windows-specific.');
|
||||
}
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const tmpdir = require('../common/tmpdir');
|
||||
|
||||
// https://github.com/nodejs/node/issues/50753
|
||||
// Make a path that is more than 260 chars long.
|
||||
// Module layout will be the following:
|
||||
// package.json
|
||||
// main
|
||||
// main.js
|
||||
|
||||
const packageDirNameLen = Math.max(260 - tmpdir.path.length, 1);
|
||||
const packageDirName = tmpdir.resolve('x'.repeat(packageDirNameLen));
|
||||
const packageDirPath = path.resolve(packageDirName);
|
||||
const packageJsonFilePath = path.join(packageDirPath, 'package.json');
|
||||
const mainDirName = 'main';
|
||||
const mainDirPath = path.resolve(packageDirPath, mainDirName);
|
||||
const mainJsFile = 'main.js';
|
||||
const mainJsFilePath = path.resolve(mainDirPath, mainJsFile);
|
||||
|
||||
tmpdir.refresh();
|
||||
|
||||
fs.mkdirSync(packageDirPath);
|
||||
fs.writeFileSync(
|
||||
packageJsonFilePath,
|
||||
`{"main":"${mainDirName}/${mainJsFile}"}`
|
||||
);
|
||||
fs.mkdirSync(mainDirPath);
|
||||
fs.writeFileSync(mainJsFilePath, 'console.log("hello world");');
|
||||
|
||||
require('internal/modules/run_main').executeUserEntryPoint(packageDirPath);
|
||||
|
||||
tmpdir.refresh();
|
@ -3,6 +3,7 @@
|
||||
const { spawnPromisified } = require('../common');
|
||||
const fixtures = require('../common/fixtures.js');
|
||||
const assert = require('node:assert');
|
||||
const path = require('node:path');
|
||||
const { execPath } = require('node:process');
|
||||
const { describe, it } = require('node:test');
|
||||
|
||||
@ -17,7 +18,7 @@ describe('ESM: Package.json', { concurrency: !process.env.TEST_PARALLEL }, () =>
|
||||
assert.ok(stderr.includes('code: \'ERR_INVALID_PACKAGE_CONFIG\''), stderr);
|
||||
assert.ok(
|
||||
stderr.includes(
|
||||
`Invalid package config ${invalidJson} while importing "invalid-pjson" from ${entry}.`
|
||||
`Invalid package config ${path.toNamespacedPath(invalidJson)} while importing "invalid-pjson" from ${entry}.`
|
||||
),
|
||||
stderr
|
||||
);
|
||||
|
@ -110,7 +110,7 @@ assert.strictEqual(require('../fixtures/packages/main-index').ok, 'ok');
|
||||
common.expectWarning(
|
||||
'DeprecationWarning',
|
||||
"Invalid 'main' field in '" +
|
||||
require.resolve('../fixtures/packages/missing-main/package.json') +
|
||||
path.toNamespacedPath(require.resolve('../fixtures/packages/missing-main/package.json')) +
|
||||
"' of 'doesnotexist.js'. Please either fix that or report it to the" +
|
||||
' module author',
|
||||
'DEP0128');
|
||||
|
Loading…
Reference in New Issue
Block a user