https://git.reactos.org/?p=reactos.git;a=commitdiff;h=34696e49fc9b6ebcde32d9e6792ac4bae48fd184

commit 34696e49fc9b6ebcde32d9e6792ac4bae48fd184
Author: Trevor Thompson <[email protected]>
AuthorDate: Wed Jul 5 03:11:13 2017 +0000

    [NTFS] - Add some fixes and improvements to finfo.c from CR-123:
    NtfsSetEndOfFile() - Make fileNameAttribute and filename variables 
uppercase. Don't leak FileRecord if we can't truncate the file. Don't leak 
memory if there's no FileName attribute.
    
    svn path=/branches/GSoC_2016/NTFS/; revision=75283
---
 drivers/filesystems/ntfs/finfo.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/filesystems/ntfs/finfo.c b/drivers/filesystems/ntfs/finfo.c
index ed1515c8d6..323b85cf45 100644
--- a/drivers/filesystems/ntfs/finfo.c
+++ b/drivers/filesystems/ntfs/finfo.c
@@ -449,9 +449,9 @@ NtfsSetEndOfFile(PNTFS_FCB Fcb,
     ULONG AttributeOffset;
     NTSTATUS Status = STATUS_SUCCESS;
     ULONGLONG AllocationSize;
-    PFILENAME_ATTRIBUTE fileNameAttribute;
+    PFILENAME_ATTRIBUTE FileNameAttribute;
     ULONGLONG ParentMFTId;
-    UNICODE_STRING filename;
+    UNICODE_STRING FileName;
 
 
     // Allocate non-paged memory for the file record
@@ -485,6 +485,7 @@ NtfsSetEndOfFile(PNTFS_FCB Fcb,
                                   NewFileSize))
         {
             DPRINT1("Couldn't decrease file size!\n");
+            ExFreePoolWithTag(FileRecord, TAG_NTFS);
             return STATUS_USER_MAPPED_FILE;
         }
     }
@@ -535,24 +536,26 @@ NtfsSetEndOfFile(PNTFS_FCB Fcb,
 
     // now we need to update this file's size in every directory index entry 
that references it
     // TODO: expand to work with every filename / hardlink stored in the file 
record.
-    fileNameAttribute = GetBestFileNameFromRecord(Fcb->Vcb, FileRecord);
-    if (fileNameAttribute == NULL)
+    FileNameAttribute = GetBestFileNameFromRecord(Fcb->Vcb, FileRecord);
+    if (FileNameAttribute == NULL)
     {
         DPRINT1("Unable to find FileName attribute associated with file!\n");
+        ReleaseAttributeContext(DataContext);
+        ExFreePoolWithTag(FileRecord, TAG_NTFS);
         return STATUS_INVALID_PARAMETER;
     }
 
-    ParentMFTId = fileNameAttribute->DirectoryFileReferenceNumber & 
NTFS_MFT_MASK;
+    ParentMFTId = FileNameAttribute->DirectoryFileReferenceNumber & 
NTFS_MFT_MASK;
 
-    filename.Buffer = fileNameAttribute->Name;
-    filename.Length = fileNameAttribute->NameLength * sizeof(WCHAR);
-    filename.MaximumLength = filename.Length;
+    FileName.Buffer = FileNameAttribute->Name;
+    FileName.Length = FileNameAttribute->NameLength * sizeof(WCHAR);
+    FileName.MaximumLength = FileName.Length;
 
     AllocationSize = ROUND_UP(NewFileSize->QuadPart, 
Fcb->Vcb->NtfsInfo.BytesPerCluster);
 
     Status = UpdateFileNameRecord(Fcb->Vcb,
                                   ParentMFTId,
-                                  &filename,
+                                  &FileName,
                                   FALSE,
                                   NewFileSize->QuadPart,
                                   AllocationSize,

Reply via email to