lib: handle windows reserved device names on UNC · nodejs/node@47543a7

@@ -9,6 +9,19 @@ if (!common.isWindows) {

99

}

10101111

const 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' },