https://git.reactos.org/?p=reactos.git;a=commitdiff;h=34696e49fc9b6ebcde32d…
commit 34696e49fc9b6ebcde32d9e6792ac4bae48fd184
Author: Trevor Thompson <tmt256(a)email.vccs.edu>
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,