summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/init.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/init.c b/lib/init.c
index a310cc5..4d28a2e 100644
--- a/lib/init.c
+++ b/lib/init.c
@@ -336,9 +336,16 @@ retry:
* directory, hence something completely different. So prepend missing
* "\\\\?\\" prefix to make path valid again.
* Reproduce: CreateProcessW("\\??\\UNC\\10.0.2.4\\qemu\\lspci.exe", ...)
+ *
+ * If path starts with DOS drive letter and with appended PCI_IDS is
+ * longer than 260 bytes and is without "\\\\?\\" prefix then append it.
+ * This prefix is required for paths and file names with DOS drive letter
+ * longer than 260 bytes.
*/
if (strncmp(path, "\\UNC\\", 5) == 0 ||
- strncmp(path, "UNC\\", 4) == 0)
+ strncmp(path, "UNC\\", 4) == 0 ||
+ (((path[0] >= 'a' && path[0] <= 'z') || (path[0] >= 'A' && path[0] <= 'Z')) &&
+ len + sizeof(PCI_IDS) >= 260))
{
memmove(path+4, path, len);
memcpy(path, "\\\\?\\", 4);