Skip to content

Commit e91b54d

Browse files
committed
lib: handle superscript variants on windows device
Windows recognizes the 8-bit [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1) superscript digits ¹, ², and ³ as digits and treats them as valid parts of COM# and LPT# device names, making them reserved in every directory. Signed-off-by: RafaelGSS <[email protected]> PR-URL: #59261 Reviewed-By: Robert Nagy <[email protected]> Reviewed-By: Filip Skokan <[email protected]> Reviewed-By: Matteo Collina <[email protected]>
1 parent f9f3dc9 commit e91b54d

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

lib/path.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ const WINDOWS_RESERVED_NAMES = [
7373
'CON', 'PRN', 'AUX', 'NUL',
7474
'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
7575
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9',
76+
'COM\xb9', 'COM\xb2', 'COM\xb3',
77+
'LPT\xb9', 'LPT\xb2', 'LPT\xb3',
7678
];
7779

7880
function isWindowsReservedName(path, colonIndex) {

test/parallel/test-path-win32-normalize-device-names.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,18 @@ const normalizeDeviceNameTests = [
4545

4646
{ input: 'COM1:', expected: '.\\COM1:.' },
4747
{ input: 'COM9:', expected: '.\\COM9:.' },
48+
{ input: 'COM¹:', expected: '.\\COM¹:.' },
49+
{ input: 'COM²:', expected: '.\\COM²:.' },
50+
{ input: 'COM³:', expected: '.\\COM³:.' },
4851
{ input: 'COM1:.\\..\\..\\foo', expected: '.\\COM1:..\\..\\foo' },
52+
{ input: 'COM¹:.\\..\\..\\foo', expected: '.\\COM¹:..\\..\\foo' },
4953
{ input: 'LPT1:', expected: '.\\LPT1:.' },
54+
{ input: 'LPT¹:', expected: '.\\LPT¹:.' },
55+
{ input: 'LPT²:', expected: '.\\LPT²:.' },
56+
{ input: 'LPT³:', expected: '.\\LPT³:.' },
5057
{ input: 'LPT9:', expected: '.\\LPT9:.' },
5158
{ input: 'LPT1:.\\..\\..\\foo', expected: '.\\LPT1:..\\..\\foo' },
59+
{ input: 'LPT¹:.\\..\\..\\foo', expected: '.\\LPT¹:..\\..\\foo' },
5260
{ input: 'LpT5:/another/path', expected: '.\\LpT5:another\\path' },
5361

5462
{ input: 'C:\\foo', expected: 'C:\\foo' },

0 commit comments

Comments
 (0)