don't free the string allocated by RtlDosPathNameToNtPathName_U using
RtlFreeUnicodeString because the string isn't allocated with the USTR
tag
Modified: trunk/reactos/lib/kernel32/file/cnotify.c
Modified: trunk/reactos/lib/kernel32/file/create.c
Modified: trunk/reactos/lib/kernel32/file/delete.c
Modified: trunk/reactos/lib/kernel32/file/file.c
Modified: trunk/reactos/lib/kernel32/file/find.c
Modified: trunk/reactos/lib/kernel32/file/hardlink.c
Modified: trunk/reactos/lib/kernel32/file/mailslot.c
Modified: trunk/reactos/lib/kernel32/file/move.c
Modified: trunk/reactos/lib/kernel32/file/npipe.c
Modified: trunk/reactos/lib/kernel32/file/volume.c
Modified: trunk/reactos/lib/ntdll/ldr/utils.c
Modified: trunk/reactos/subsys/smss/initpage.c
Modified: trunk/reactos/subsys/smss/initwkdll.c
_____
Modified: trunk/reactos/lib/kernel32/file/cnotify.c
--- trunk/reactos/lib/kernel32/file/cnotify.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/cnotify.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -99,18 +99,12 @@
-Gunnar
*/
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
- /* FIXME: We free the string alloced by
RtlDosPathNameToNtPathName_U, but what
- * about the special case where the user can pass a \\?\ path? We
must not free
- * the users buffer!. But should we even call
RtlDosPathNameToNtPathName_U in that
- * case??? -Gunnar
- */
- RtlFreeUnicodeString( &NtPathU);
-
-
-
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus(Status);
_____
Modified: trunk/reactos/lib/kernel32/file/create.c
--- trunk/reactos/lib/kernel32/file/create.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/create.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -104,19 +104,6 @@
return (INVALID_HANDLE_VALUE);
}
- /* validate & translate the filename */
- if (!RtlDosPathNameToNtPathName_U (lpFileName,
- &NtPathU,
- NULL,
- NULL))
- {
- DPRINT("Invalid path\n");
- SetLastError(ERROR_PATH_NOT_FOUND);
- return INVALID_HANDLE_VALUE;
- }
-
- DPRINT("NtPathU \'%S\'\n", NtPathU.Buffer);
-
/* validate & translate the flags */
/* translate the flags that need no validation */
@@ -209,6 +196,19 @@
}
}
+ /* validate & translate the filename */
+ if (!RtlDosPathNameToNtPathName_U (lpFileName,
+ &NtPathU,
+ NULL,
+ NULL))
+ {
+ DPRINT("Invalid path\n");
+ SetLastError(ERROR_PATH_NOT_FOUND);
+ return INVALID_HANDLE_VALUE;
+ }
+
+ DPRINT("NtPathU \'%wZ\'\n", &NtPathU);
+
if (hTemplateFile != NULL)
{
FILE_EA_INFORMATION EaInformation;
@@ -230,6 +230,10 @@
EaInformation.EaSize);
if (EaBuffer == NULL)
{
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
+
/* the template file handle is valid and has extended
attributes,
however we seem to lack some memory here. We should
fail here! */
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
@@ -309,7 +313,9 @@
EaBuffer,
EaLength);
- RtlFreeUnicodeString(&NtPathU);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
/* free the extended attributes buffer if allocated */
if (EaBuffer != NULL)
@@ -370,7 +376,7 @@
HANDLE hSymlink = NULL;
UNICODE_STRING SymlinkFileName = { 0, 0, NULL };
UNICODE_STRING TargetFileName = { 0, 0, NULL };
- BOOLEAN bRelativePath = FALSE;
+ BOOLEAN bAllocatedTarget = FALSE, bRelativePath = FALSE;
LPWSTR lpTargetFullFileName = NULL;
SIZE_T cbPrintName;
SIZE_T cbReparseData;
@@ -439,6 +445,7 @@
default:
if(!RtlDosPathNameToNtPathName_U(lpTargetFileName,
&TargetFileName, NULL, NULL))
{
+ bAllocatedTarget = TRUE;
dwErr = ERROR_INVALID_PARAMETER;
goto Cleanup;
}
@@ -535,7 +542,12 @@
NtClose(hSymlink);
RtlFreeUnicodeString(&SymlinkFileName);
- RtlFreeUnicodeString(&TargetFileName);
+ if (bAllocatedTarget)
+ {
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ TargetFileName.Buffer);
+ }
if(lpTargetFullFileName)
RtlFreeHeap(RtlGetProcessHeap(), 0, lpTargetFullFileName);
_____
Modified: trunk/reactos/lib/kernel32/file/delete.c
--- trunk/reactos/lib/kernel32/file/delete.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/delete.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -84,7 +84,9 @@
NULL,
0);
- RtlFreeUnicodeString(&NtPathU);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
if (!NT_SUCCESS(Status))
{
_____
Modified: trunk/reactos/lib/kernel32/file/file.c
--- trunk/reactos/lib/kernel32/file/file.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/file.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -309,7 +309,9 @@
if ((uStyle & OF_PARSE) == OF_PARSE)
{
- RtlFreeUnicodeString(&FileNameString);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ FileNameString.Buffer);
return (HFILE)NULL;
}
@@ -327,7 +329,9 @@
FILE_SHARE_READ,
FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT);
- RtlFreeUnicodeString(&FileNameString);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ FileNameString.Buffer);
lpReOpenBuff->nErrCode = RtlNtStatusToDosError(errCode);
_____
Modified: trunk/reactos/lib/kernel32/file/find.c
--- trunk/reactos/lib/kernel32/file/find.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/find.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -877,7 +877,9 @@
NtClose(FileHandle);
}
- RtlFreeUnicodeString(&NtPathU);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
if (!NT_SUCCESS(Status))
{
_____
Modified: trunk/reactos/lib/kernel32/file/hardlink.c
--- trunk/reactos/lib/kernel32/file/hardlink.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/hardlink.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -181,7 +181,7 @@
{
SetLastError(ERROR_INVALID_NAME);
}
- RtlFreeUnicodeString(&LinkTarget);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, LinkTarget.Buffer);
}
else
{
_____
Modified: trunk/reactos/lib/kernel32/file/mailslot.c
--- trunk/reactos/lib/kernel32/file/mailslot.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/mailslot.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -99,7 +99,9 @@
nMaxMessageSize,
&DefaultTimeOut);
- RtlFreeUnicodeString(&MailslotName);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ MailslotName.Buffer);
if (!NT_SUCCESS(Status))
{
_____
Modified: trunk/reactos/lib/kernel32/file/move.c
--- trunk/reactos/lib/kernel32/file/move.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/move.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -81,7 +81,7 @@
UNICODE_STRING nameW, source_name, dest_name;
KEY_VALUE_PARTIAL_INFORMATION *info;
BOOL rc = FALSE;
- HANDLE Reboot = 0;
+ HANDLE Reboot = NULL;
DWORD len1, len2;
DWORD DataSize = 0;
BYTE *Buffer = NULL;
@@ -98,7 +98,7 @@
dest_name.Buffer = NULL;
if (dest && !RtlDosPathNameToNtPathName_U( dest, &dest_name, NULL,
NULL ))
{
- RtlFreeUnicodeString( &source_name );
+ RtlFreeHeap( RtlGetProcessHeap(), 0, source_name.Buffer );
SetLastError( ERROR_PATH_NOT_FOUND );
return FALSE;
}
@@ -120,8 +120,8 @@
if (!NT_SUCCESS(Status))
{
DPRINT1("NtCreateKey() failed (Status 0x%lx)\n", Status);
- RtlFreeUnicodeString( &source_name );
- RtlFreeUnicodeString( &dest_name );
+ RtlFreeHeap( RtlGetProcessHeap(), 0, source_name.Buffer );
+ RtlFreeHeap( RtlGetProcessHeap(), 0, dest_name.Buffer );
return FALSE;
}
@@ -176,11 +176,11 @@
*p = 0;
DataSize += sizeof(WCHAR);
- rc = !NtSetValueKey(Reboot, &nameW, 0, REG_MULTI_SZ, Buffer +
info_size, DataSize - info_size);
+ rc = NT_SUCCESS(NtSetValueKey(Reboot, &nameW, 0, REG_MULTI_SZ,
Buffer + info_size, DataSize - info_size));
Quit:
- RtlFreeUnicodeString( &source_name );
- RtlFreeUnicodeString( &dest_name );
+ RtlFreeHeap( RtlGetProcessHeap(), 0, source_name.Buffer );
+ RtlFreeHeap( RtlGetProcessHeap(), 0, dest_name.Buffer );
if (Reboot) NtClose(Reboot);
HeapFree( GetProcessHeap(), 0, Buffer );
return(rc);
_____
Modified: trunk/reactos/lib/kernel32/file/npipe.c
--- trunk/reactos/lib/kernel32/file/npipe.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/npipe.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -215,7 +215,9 @@
}
/* Free the name */
- RtlFreeUnicodeString(&NamedPipeName);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NamedPipeName.Buffer);
/* Check status */
if (!NT_SUCCESS(Status))
_____
Modified: trunk/reactos/lib/kernel32/file/volume.c
--- trunk/reactos/lib/kernel32/file/volume.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/lib/kernel32/file/volume.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -66,7 +66,9 @@
NULL,
0);
- RtlFreeUnicodeString(&NtPathU);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
if (!NT_SUCCESS(errCode))
{
_____
Modified: trunk/reactos/lib/ntdll/ldr/utils.c
--- trunk/reactos/lib/ntdll/ldr/utils.c 2006-01-22 13:06:23 UTC (rev
20974)
+++ trunk/reactos/lib/ntdll/ldr/utils.c 2006-01-22 13:41:39 UTC (rev
20975)
@@ -640,10 +640,14 @@
{
DPRINT1("Dll open of %wZ failed: Status = 0x%08lx\n",
&FullNtFileName, Status);
- RtlFreeUnicodeString (&FullNtFileName);
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ FullNtFileName.Buffer);
return Status;
}
- RtlFreeUnicodeString (&FullNtFileName);
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ FullNtFileName.Buffer);
Status = NtReadFile(FileHandle,
NULL,
_____
Modified: trunk/reactos/subsys/smss/initpage.c
--- trunk/reactos/subsys/smss/initpage.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/subsys/smss/initpage.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -162,7 +162,9 @@
NULL,
0);
- RtlFreeUnicodeString(&NtPathU);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ NtPathU.Buffer);
if (!NT_SUCCESS(Status))
{
@@ -230,7 +232,9 @@
}
Cleanup:
- RtlFreeUnicodeString(&FileName);
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ FileName.Buffer);
return STATUS_SUCCESS;
}
_____
Modified: trunk/reactos/subsys/smss/initwkdll.c
--- trunk/reactos/subsys/smss/initwkdll.c 2006-01-22 13:06:23 UTC
(rev 20974)
+++ trunk/reactos/subsys/smss/initwkdll.c 2006-01-22 13:41:39 UTC
(rev 20975)
@@ -203,9 +203,14 @@
&IoStatusBlock,
FILE_SHARE_READ | FILE_SHARE_WRITE,
FILE_SYNCHRONOUS_IO_NONALERT |
FILE_DIRECTORY_FILE);
+
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ DllNtPath.Buffer);
+
if (!NT_SUCCESS(Status))
{
- DPRINT1("NtOpenFile(%wZ) failed (Status %lx)\n", &DllNtPath,
Status);
+ DPRINT1("NtOpenFile failed (Status %lx)\n", Status);
return Status;
}