[PATCH 1/4] ntdll: Also accept \\? as a UNC or device path in RtlDetermineDosPathNameType_U().

Zebediah Figura z.figura12 at gmail.com
Thu Aug 23 22:50:04 CDT 2018


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 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 ccc95e3..8fe61da 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 9369e1c..94b76c1 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 }
     };
 
-- 
2.7.4




More information about the wine-devel mailing list