From 3fa669eddb182f7295291861f8f857771a117e87 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 17 Oct 2014 06:55:52 +0000 Subject: [PATCH] [NTFS] Bugfixing... Part 3/X: - Really release the allocated memory in NtfsFindFileAt() and NtfsLookupFileAt(). Don't attempt to release caller pointer! This fixes crashes on directory enumeration failure. Even though this latter still doesn't work. svn path=/trunk/; revision=64776 --- reactos/drivers/filesystems/ntfs/mft.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/mft.c b/reactos/drivers/filesystems/ntfs/mft.c index 913911ab107..5ee4bd370e2 100644 --- a/reactos/drivers/filesystems/ntfs/mft.c +++ b/reactos/drivers/filesystems/ntfs/mft.c @@ -397,6 +397,8 @@ ReadFileRecord(PDEVICE_EXTENSION Vcb, { ULONGLONG BytesRead; + DPRINT1("ReadFileRecord(%p, %I64x, %p)\n", Vcb, index, file); + BytesRead = ReadAttribute(Vcb, Vcb->MFTContext, index * Vcb->NtfsInfo.BytesPerFileRecord, (PCHAR)file, Vcb->NtfsInfo.BytesPerFileRecord); if (BytesRead != Vcb->NtfsInfo.BytesPerFileRecord) { @@ -714,7 +716,7 @@ NtfsLookupFileAt(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DPRINT("NtfsLookupFileAt: Can't read MFT record\n"); - ExFreePoolWithTag(FileRecord, TAG_NTFS); + ExFreePoolWithTag(*FileRecord, TAG_NTFS); return Status; } @@ -724,7 +726,7 @@ NtfsLookupFileAt(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DPRINT("NtfsLookupFileAt: Can't find data attribute\n"); - ExFreePoolWithTag(FileRecord, TAG_NTFS); + ExFreePoolWithTag(*FileRecord, TAG_NTFS); return Status; } @@ -775,7 +777,7 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DPRINT("NtfsFindFileAt: Can't read MFT record\n"); - ExFreePoolWithTag(FileRecord, TAG_NTFS); + ExFreePoolWithTag(*FileRecord, TAG_NTFS); return Status; } @@ -785,7 +787,7 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb, if (!NT_SUCCESS(Status)) { DPRINT("NtfsFindFileAt: Can't find data attribute\n"); - ExFreePoolWithTag(FileRecord, TAG_NTFS); + ExFreePoolWithTag(*FileRecord, TAG_NTFS); return Status; }