From ee5c46a55c6f982fe60a95dff4fe9fbcee1f0028 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Thu, 23 Aug 2018 22:50:04 -0500 Subject: [PATCH] ntdll: Also accept \\? as a UNC or device path in RtlDetermineDosPathNameType_U(). Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/ntdll/path.c | 8 ++++---- dlls/ntdll/tests/path.c | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/dlls/ntdll/path.c b/dlls/ntdll/path.c index ccc95e3d643..8fe61dae5ad 100644 --- a/dlls/ntdll/path.c +++ b/dlls/ntdll/path.c @@ -244,10 +244,10 @@ DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U( PCWSTR path ) if (IS_SEPARATOR(path[0])) { if (!IS_SEPARATOR(path[1])) return ABSOLUTE_PATH; /* "/foo" */ - if (path[2] != '.') return UNC_PATH; /* "//foo" */ - if (IS_SEPARATOR(path[3])) return DEVICE_PATH; /* "//./foo" */ - if (path[3]) return UNC_PATH; /* "//.foo" */ - return UNC_DOT_PATH; /* "//." */ + if (path[2] != '.' && path[2] != '?') return UNC_PATH; /* "//foo" */ + if (IS_SEPARATOR(path[3])) return DEVICE_PATH; /* "//./foo" or "//?/foo" */ + if (path[3]) return UNC_PATH; /* "//.foo" or "//?foo" */ + return UNC_DOT_PATH; /* "//." or "//?" */ } else { diff --git a/dlls/ntdll/tests/path.c b/dlls/ntdll/tests/path.c index 9369e1c4285..94b76c19c5d 100644 --- a/dlls/ntdll/tests/path.c +++ b/dlls/ntdll/tests/path.c @@ -68,6 +68,13 @@ static void test_RtlDetermineDosPathNameType_U(void) { "//.foo", 1 }, { "\\\\.", 7 }, { "//.", 7 }, + { "\\\\?\\foo", 6 }, + { "//?/foo", 6 }, + { "/\\?/foo", 6 }, + { "\\\\?foo", 1 }, + { "//?foo", 1 }, + { "\\\\?", 7 }, + { "//?", 7 }, { NULL, 0 } };