https://git.reactos.org/?p=reactos.git;a=commitdiff;h=34696e49fc9b6ebcde32d9...
commit 34696e49fc9b6ebcde32d9e6792ac4bae48fd184 Author: Trevor Thompson tmt256@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,