lib: handle windows reserved device names on UNC · nodejs/node@47543a7
@@ -9,6 +9,19 @@ if (!common.isWindows) {
99}
10101111const normalizeDeviceNameTests = [
12+// UNC paths: \\server\share\... is a Windows UNC path, where 'server' is the network server name and 'share'
13+// is the shared folder. These are used for network file access and are subject to reserved device name
14+// checks after the share.
15+{ input: '\\\\server\\share\\COM1:', expected: '\\\\server\\share\\COM1:' },
16+{ input: '\\\\server\\share\\PRN:', expected: '\\\\server\\share\\PRN:' },
17+{ input: '\\\\server\\share\\AUX:', expected: '\\\\server\\share\\AUX:' },
18+{ input: '\\\\server\\share\\LPT1:', expected: '\\\\server\\share\\LPT1:' },
19+{ input: '\\\\server\\share\\COM1:\\foo\\bar', expected: '\\\\server\\share\\COM1:\\foo\\bar' },
20+{ input: '\\\\server\\share\\path\\COM1:', expected: '\\\\server\\share\\path\\COM1:' },
21+{ input: '\\\\server\\share\\COM1:..\\..\\..\\..\\Windows', expected: '\\\\server\\share\\Windows' },
22+{ input: '\\\\server\\share\\path\\to\\LPT9:..\\..\\..\\..\\..\\..\\..\\..\\..\\file.txt',
23+expected: '\\\\server\\share\\file.txt' },
24+1225{ input: 'CON', expected: 'CON' },
1326{ input: 'con', expected: 'con' },
1427{ input: 'CON:', expected: '.\\CON:.' },
@@ -81,6 +94,8 @@ const normalizeDeviceNameTests = [
8194// Test cases from original vulnerability reports or similar scenarios
8295{ input: 'COM1:.\\..\\..\\foo.js', expected: '.\\COM1:..\\..\\foo.js' },
8396{ input: 'LPT1:.\\..\\..\\another.txt', expected: '.\\LPT1:..\\..\\another.txt' },
97+// UNC paths
98+{ input: '\\\\?\\COM1:.\\..\\..\\foo2.js', expected: '\\\\?\\COM1:\\foo2.js' },
849985100// Paths with device names not at the beginning
86101{ input: 'C:\\CON', expected: 'C:\\CON' },