mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00

PR-URL: https://github.com/nodejs/node/pull/58883 Refs: https://github.com/nodejs/node/issues/58634 Refs: https://github.com/nodejs/node/issues/58869 Reviewed-By: LiviaMedeiros <livia@cirno.name> Reviewed-By: Jason Zhang <xzha4350@gmail.com> Reviewed-By: Dario Piotrowicz <dario.piotrowicz@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
// Refs: https://github.com/nodejs/node/issues/58634
|
|
// Refs: https://github.com/nodejs/node/issues/58869
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.isLinux) {
|
|
common.skip('This test is only applicable to Linux');
|
|
}
|
|
|
|
const { ok, strictEqual } = require('assert');
|
|
const { join } = require('path');
|
|
const path = require('path');
|
|
const tmpdir = require('../common/tmpdir');
|
|
const {
|
|
cpSync,
|
|
existsSync,
|
|
mkdirSync,
|
|
writeFileSync,
|
|
readFileSync,
|
|
} = require('fs');
|
|
tmpdir.refresh();
|
|
|
|
const tmpdirPath = Buffer.from(join(tmpdir.path, 'a', 'c'));
|
|
const sepBuf = Buffer.from(path.sep);
|
|
|
|
mkdirSync(tmpdirPath, { recursive: true });
|
|
|
|
// The name is the Shift-JIS encoded version of こんにちは世界,
|
|
// or "Hello, World" in Japanese. On Linux systems, this name is
|
|
// a valid path name and should be handled correctly by the copy
|
|
// operation. However, the implementation of cp makes the assumption
|
|
// that the path names are UTF-8 encoded, so while we can create the
|
|
// file and check its existence using a Buffer, the recursive cp
|
|
// operation will fail because it tries to interpret every file name
|
|
// as UTF-8.
|
|
const name = Buffer.from([
|
|
0x82, 0xB1, 0x82, 0xF1, 0x82, 0xC9, 0x82,
|
|
0xBF, 0x82, 0xCD, 0x90, 0x6C, 0x8C, 0x8E,
|
|
]);
|
|
const testPath = Buffer.concat([tmpdirPath, sepBuf, name]);
|
|
|
|
writeFileSync(testPath, 'test content');
|
|
ok(existsSync(testPath));
|
|
strictEqual(readFileSync(testPath, 'utf8'), 'test content');
|
|
|
|
// The cpSync is expected to fail because the implementation does not
|
|
// properly handle non-UTF8 names in the path.
|
|
|
|
cpSync(join(tmpdir.path, 'a'), join(tmpdir.path, 'b'), {
|
|
recursive: true,
|
|
filter: common.mustCall(() => true, 1),
|
|
});
|