Author: tthompson
Date: Wed Jul 5 03:11:13 2017
New Revision: 75283
URL:
http://svn.reactos.org/svn/reactos?rev=75283&view=rev
Log:
[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.
Modified:
branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/finfo.c
Modified: branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/finfo.c
URL:
http://svn.reactos.org/svn/reactos/branches/GSoC_2016/NTFS/drivers/filesyst…
==============================================================================
--- branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/finfo.c [iso-8859-1] (original)
+++ branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/finfo.c [iso-8859-1] Wed Jul 5
03:11:13 2017
@@ -449,9 +449,9 @@
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 @@
NewFileSize))
{
DPRINT1("Couldn't decrease file size!\n");
+ ExFreePoolWithTag(FileRecord, TAG_NTFS);
return STATUS_USER_MAPPED_FILE;
}
}
@@ -535,24 +536,26 @@
// 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;
-
- filename.Buffer = fileNameAttribute->Name;
- filename.Length = fileNameAttribute->NameLength * sizeof(WCHAR);
- filename.MaximumLength = filename.Length;
+ ParentMFTId = FileNameAttribute->DirectoryFileReferenceNumber &
NTFS_MFT_MASK;
+
+ 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,