[NTFS]
authorPierre Schweitzer <pierre@reactos.org>
Fri, 17 Oct 2014 06:55:52 +0000 (06:55 +0000)
committerPierre Schweitzer <pierre@reactos.org>
Fri, 17 Oct 2014 06:55:52 +0000 (06:55 +0000)
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

index 913911a..5ee4bd3 100644 (file)
@@ -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;
     }