[ntoskrnl] Never suppose that buffer in UNICODE_STRING is null terminated. Fixes...
authorHervé Poussineau <hpoussin@reactos.org>
Sat, 13 Mar 2010 23:19:05 +0000 (23:19 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Sat, 13 Mar 2010 23:19:05 +0000 (23:19 +0000)
svn path=/trunk/; revision=46193

reactos/ntoskrnl/io/iomgr/driver.c
reactos/ntoskrnl/io/iomgr/drvrlist.c

index c9925d5..a81c25e 100644 (file)
@@ -158,35 +158,22 @@ IopGetDriverObject(
 VOID 
 FASTCALL
 INIT_FUNCTION
-IopDisplayLoadingMessage(PVOID ServiceName, 
-                         BOOLEAN Unicode)
+IopDisplayLoadingMessage(PUNICODE_STRING ServiceName)
 {
     CHAR TextBuffer[256];
-    PCHAR Extra = ".sys";
 
     if (ExpInTextModeSetup) return;
-    if (Unicode)
-    {
-        if (wcsstr(_wcsupr(ServiceName), L".SYS")) Extra = "";
-        sprintf(TextBuffer,
-                "%s%s%s\\%S%s\n",
-                KeLoaderBlock->ArcBootDeviceName,
-                KeLoaderBlock->NtBootPathName,
-                "System32\\Drivers",
-                (PWCHAR)ServiceName,
-                Extra);
-    }
+    RtlUpcaseUnicodeString(ServiceName, ServiceName, FALSE);
+    snprintf(TextBuffer, sizeof(TextBuffer),
+            "%s%s%s\\%wZ",
+            KeLoaderBlock->ArcBootDeviceName,
+            KeLoaderBlock->NtBootPathName,
+            "System32\\Drivers",
+            ServiceName);
+    if (!strstr(TextBuffer, ".sys"))
+        strcat(TextBuffer, ".sys\n");
     else
-    {
-        if (strstr(_strupr(ServiceName), ".SYS")) Extra = "";
-        sprintf(TextBuffer,
-                "%s%s%s\\%s%s\n",
-                KeLoaderBlock->ArcBootDeviceName,
-                KeLoaderBlock->NtBootPathName,
-                "System32\\Drivers",
-                (PCHAR)ServiceName,
-                Extra);
-    }
+        strcat(TextBuffer, "\n");
     HalDisplayString(TextBuffer);
 }
 
@@ -788,7 +775,7 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
    /*
     * Display 'Loading XXX...' message
     */
-   IopDisplayLoadingMessage(ModuleName->Buffer, TRUE);
+   IopDisplayLoadingMessage(ModuleName);
    InbvIndicateProgress();
 
    /*
index 42b69c6..ecc9980 100644 (file)
@@ -48,8 +48,7 @@ extern BOOLEAN NoGuiBoot;
 VOID
 FASTCALL
 INIT_FUNCTION
-IopDisplayLoadingMessage(PVOID ServiceName,
-                         BOOLEAN Unicode);
+IopDisplayLoadingMessage(PUNICODE_STRING ServiceName);
 
 /* PRIVATE FUNCTIONS **********************************************************/
 
@@ -416,7 +415,7 @@ IopLoadDriver(PSERVICE Service)
 {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
 
-   IopDisplayLoadingMessage(Service->ServiceName.Buffer, TRUE);
+   IopDisplayLoadingMessage(&Service->ServiceName);
    Status = ZwLoadDriver(&Service->RegistryPath);
    IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE);
    if (!NT_SUCCESS(Status))