svn path=/trunk/; revision=20079
- UNICODE_STRING PathU;
- UNICODE_STRING FileNameU;
- UNICODE_STRING ExtensionU;
- UNICODE_STRING BufferU;
+ UNICODE_STRING PathU = {0};
+ UNICODE_STRING FileNameU = {0};
+ UNICODE_STRING ExtensionU = {0};
+ UNICODE_STRING BufferU = {0};
ANSI_STRING Path;
ANSI_STRING FileName;
ANSI_STRING Extension;
ANSI_STRING Buffer;
PWCHAR FilePartW;
ANSI_STRING Path;
ANSI_STRING FileName;
ANSI_STRING Extension;
ANSI_STRING Buffer;
PWCHAR FilePartW;
+ DWORD RetValue = 0;
+ NTSTATUS Status = STATUS_SUCCESS;
RtlInitAnsiString (&Path,
(LPSTR)lpPath);
RtlInitAnsiString (&Path,
(LPSTR)lpPath);
/* convert ansi (or oem) strings to unicode */
if (bIsFileApiAnsi)
{
/* convert ansi (or oem) strings to unicode */
if (bIsFileApiAnsi)
{
- RtlAnsiStringToUnicodeString (&PathU,
- &Path,
- TRUE);
- RtlAnsiStringToUnicodeString (&FileNameU,
- &FileName,
- TRUE);
- RtlAnsiStringToUnicodeString (&ExtensionU,
- &Extension,
- TRUE);
+ Status = RtlAnsiStringToUnicodeString (&PathU,
+ &Path,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
+
+ Status = RtlAnsiStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
+
+ Status = RtlAnsiStringToUnicodeString (&ExtensionU,
+ &Extension,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
- RtlOemStringToUnicodeString (&PathU,
- &Path,
- TRUE);
- RtlOemStringToUnicodeString (&FileNameU,
- &FileName,
- TRUE);
- RtlOemStringToUnicodeString (&ExtensionU,
- &Extension,
- TRUE);
+ Status = RtlOemStringToUnicodeString (&PathU,
+ &Path,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
+ Status = RtlOemStringToUnicodeString (&FileNameU,
+ &FileName,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
+
+ Status = RtlOemStringToUnicodeString (&ExtensionU,
+ &Extension,
+ TRUE);
+ if (!NT_SUCCESS(Status))
+ goto Cleanup;
BufferU.MaximumLength = nBufferLength * sizeof(WCHAR);
BufferU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
BufferU.MaximumLength);
BufferU.MaximumLength = nBufferLength * sizeof(WCHAR);
BufferU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
BufferU.MaximumLength);
+ if (BufferU.Buffer == NULL)
+ {
+ Status = STATUS_NO_MEMORY;
+ goto Cleanup;
+ }
Buffer.MaximumLength = nBufferLength;
Buffer.Buffer = lpBuffer;
Buffer.MaximumLength = nBufferLength;
Buffer.Buffer = lpBuffer;
BufferU.Buffer,
&FilePartW);
BufferU.Buffer,
&FilePartW);
- RtlFreeHeap (RtlGetProcessHeap (),
- 0,
- PathU.Buffer);
- RtlFreeHeap (RtlGetProcessHeap (),
- 0,
- FileNameU.Buffer);
- RtlFreeHeap (RtlGetProcessHeap (),
- 0,
- ExtensionU.Buffer);
-
if (0 != RetValue)
{
BufferU.Length = wcslen(BufferU.Buffer) * sizeof(WCHAR);
if (0 != RetValue)
{
BufferU.Length = wcslen(BufferU.Buffer) * sizeof(WCHAR);
FALSE);
/* nul-terminate ascii string */
Buffer.Buffer[BufferU.Length / sizeof(WCHAR)] = '\0';
FALSE);
/* nul-terminate ascii string */
Buffer.Buffer[BufferU.Length / sizeof(WCHAR)] = '\0';
+
+ if (NULL != lpFilePart && BufferU.Length != 0)
+ {
+ *lpFilePart = strrchr (lpBuffer, '\\') + 1;
+ }
+Cleanup:
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ PathU.Buffer);
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ FileNameU.Buffer);
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ ExtensionU.Buffer);
RtlFreeHeap (RtlGetProcessHeap (),
0,
BufferU.Buffer);
RtlFreeHeap (RtlGetProcessHeap (),
0,
BufferU.Buffer);
- if (NULL != lpFilePart)
+ if (!NT_SUCCESS(Status))
- *lpFilePart = strrchr (lpBuffer, '\\') + 1;
+ SetLastErrorByStatus(Status);
+ return 0;
- AppPathW = (PWCHAR) RtlAllocateHeap(GetProcessHeap(),
+ AppPathW = (PWCHAR) RtlAllocateHeap(RtlGetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY,
MAX_PATH * sizeof(WCHAR));
HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY,
MAX_PATH * sizeof(WCHAR));
+ if (AppPathW == NULL)
+ {
+ SetLastError(ERROR_OUTOFMEMORY);
+ return 0;
+ }
wcscat (AppPathW, NtCurrentPeb()->ProcessParameters->ImagePathName.Buffer);
wcscat (AppPathW, NtCurrentPeb()->ProcessParameters->ImagePathName.Buffer);
len += 1 + GetWindowsDirectoryW(&Buffer, 0);
len += 1 + wcslen(AppPathW) * sizeof(WCHAR);
len += 1 + GetWindowsDirectoryW(&Buffer, 0);
len += 1 + wcslen(AppPathW) * sizeof(WCHAR);
- EnvironmentBufferW = (PWCHAR) RtlAllocateHeap(GetProcessHeap(),
+ EnvironmentBufferW = (PWCHAR) RtlAllocateHeap(RtlGetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY,
len * sizeof(WCHAR));
if (EnvironmentBufferW == NULL)
{
HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY,
len * sizeof(WCHAR));
if (EnvironmentBufferW == NULL)
{
+ RtlFreeHeap(RtlGetProcessHeap(), 0, AppPathW);
SetLastError(ERROR_OUTOFMEMORY);
return 0;
}
SetLastError(ERROR_OUTOFMEMORY);
return 0;
}
+ /* Now calculate the total length of the structure and allocate it */
+ WaitPipeInfoSize = FIELD_OFFSET(FILE_PIPE_WAIT_FOR_BUFFER, Name[0]) +
+ NewName.Length;
+ WaitPipeInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, WaitPipeInfoSize);
+ if (WaitPipeInfo == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+
/* Initialize the object attributes */
DPRINT("Opening: %wZ\n", &DevicePath);
InitializeObjectAttributes(&ObjectAttributes,
/* Initialize the object attributes */
DPRINT("Opening: %wZ\n", &DevicePath);
InitializeObjectAttributes(&ObjectAttributes,
DPRINT1("Status: %lx\n", Status);
SetLastErrorByStatus(Status);
RtlFreeUnicodeString(&NamedPipeName);
DPRINT1("Status: %lx\n", Status);
SetLastErrorByStatus(Status);
RtlFreeUnicodeString(&NamedPipeName);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, WaitPipeInfo);
- /* Now calculate the total length of the structure and allocate it */
- WaitPipeInfoSize = FIELD_OFFSET(FILE_PIPE_WAIT_FOR_BUFFER, Name[0]) +
- NewName.Length;
- WaitPipeInfo = RtlAllocateHeap(RtlGetProcessHeap(), 0, WaitPipeInfoSize);
-
/* Check what timeout we got */
if (nTimeOut == NMPWAIT_USE_DEFAULT_WAIT)
{
/* Check what timeout we got */
if (nTimeOut == NMPWAIT_USE_DEFAULT_WAIT)
{
/* Calculate the buffer space that we'll need and allocate it */
BufferSize = nBufferSize + FIELD_OFFSET(FILE_PIPE_PEEK_BUFFER, Data[0]);
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, BufferSize);
/* Calculate the buffer space that we'll need and allocate it */
BufferSize = nBufferSize + FIELD_OFFSET(FILE_PIPE_PEEK_BUFFER, Data[0]);
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, BufferSize);
+ if (Buffer == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
/* Tell the driver to seek */
Status = NtFsControlFile(hNamedPipe,
/* Tell the driver to seek */
Status = NtFsControlFile(hNamedPipe,
)
{
UNICODE_STRING FileSystemNameU;
)
{
UNICODE_STRING FileSystemNameU;
- UNICODE_STRING VolumeNameU;
+ UNICODE_STRING VolumeNameU = {0};
ANSI_STRING VolumeName;
ANSI_STRING FileSystemName;
PWCHAR RootPathNameW;
ANSI_STRING VolumeName;
ANSI_STRING FileSystemName;
PWCHAR RootPathNameW;
if (lpVolumeNameBuffer)
{
if (lpVolumeNameBuffer)
{
- VolumeNameU.Length = 0;
VolumeNameU.MaximumLength = nVolumeNameSize * sizeof(WCHAR);
VolumeNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
VolumeNameU.MaximumLength);
VolumeNameU.MaximumLength = nVolumeNameSize * sizeof(WCHAR);
VolumeNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
VolumeNameU.MaximumLength);
+ if (VolumeNameU.Buffer == NULL)
+ {
+ goto FailNoMem;
+ }
}
if (lpFileSystemNameBuffer)
}
if (lpFileSystemNameBuffer)
FileSystemNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
FileSystemNameU.MaximumLength);
FileSystemNameU.Buffer = RtlAllocateHeap (RtlGetProcessHeap (),
0,
FileSystemNameU.MaximumLength);
+ if (FileSystemNameU.Buffer == NULL)
+ {
+ if (VolumeNameU.Buffer != NULL)
+ {
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ VolumeNameU.Buffer);
+ }
+
+FailNoMem:
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
}
Result = GetVolumeInformationW (RootPathNameW,
}
Result = GetVolumeInformationW (RootPathNameW,
0,
sizeof(FILE_FS_LABEL_INFORMATION) +
LabelLength);
0,
sizeof(FILE_FS_LABEL_INFORMATION) +
LabelLength);
+ if (LabelInfo == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
LabelInfo->VolumeLabelLength = LabelLength;
memcpy(LabelInfo->VolumeLabel,
lpVolumeName,
LabelInfo->VolumeLabelLength = LabelLength;
memcpy(LabelInfo->VolumeLabel,
lpVolumeName,