fix(path): DOS device path check #40976

Problem:
The current check is intended to match DOS device paths starting with
`\\?` or `\\.` but will match any path starting with `?` or `.`,
including relative paths such as `.\`.
This is because the leading slashes are removed before the comparison.

Solution:
Changes the check to include the path's prefix, assuring the path has
the correct amount of separators for a DOS device path.
This commit is contained in:
Dominic Della Valle
2026-07-26 07:18:57 -04:00
committed by GitHub
parent dec3d8215d
commit 4a5062cda6
2 changed files with 6 additions and 1 deletions

View File

@@ -182,6 +182,11 @@ describe('fnamemodify()', function()
eq('//?/UNC/server', fnamemodify('//?/UNC/server', ':h'))
eq('//?/UNC/server/share', fnamemodify('//?/UNC/server/share', ':h'))
eq('//?/UNC/server/share/', fnamemodify('//?/UNC/server/share/foo', ':h'))
-- relative "./" and ".\" prefixes
eq('./path/to', fnamemodify('./path/to/hello.txt', ':h'))
eq('./path', fnamemodify('./path/to/hello.txt', ':h:h'))
eq('./path/to', fnamemodify([[.\path\to\hello.txt]], ':h'))
end
end)