Author: pschweitzer Date: Sun Feb 26 13:32:55 2017 New Revision: 73923
URL: http://svn.reactos.org/svn/reactos?rev=73923&view=rev Log: [FASTFAT] Reject more broken file names on open/create. Fixes a few kmtests:IoFilesystem tests
Modified: trunk/reactos/drivers/filesystems/fastfat/create.c
Modified: trunk/reactos/drivers/filesystems/fastfat/create.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fastfat... ============================================================================== --- trunk/reactos/drivers/filesystems/fastfat/create.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fastfat/create.c [iso-8859-1] Sun Feb 26 13:32:55 2017 @@ -398,6 +398,7 @@ BOOLEAN PagingFileCreate; BOOLEAN Dots; BOOLEAN OpenTargetDir; + BOOLEAN TrailingBackslash; UNICODE_STRING FileNameU; UNICODE_STRING PathNameU; ULONG Attributes; @@ -508,6 +509,9 @@ PathNameU = FileObject->FileName; c = PathNameU.Buffer + PathNameU.Length / sizeof(WCHAR); last = c - 1; + + TrailingBackslash = (*last == L'\'); + Dots = TRUE; while (c-- > PathNameU.Buffer) { @@ -517,6 +521,12 @@ { return STATUS_OBJECT_NAME_INVALID; } + if (*c == L'\' && (c - 1) > PathNameU.Buffer && + *(c - 1) == L'\') + { + return STATUS_OBJECT_NAME_INVALID; + } + last = c - 1; Dots = TRUE; } @@ -690,6 +700,11 @@ RequestedDisposition == FILE_OVERWRITE_IF || RequestedDisposition == FILE_SUPERSEDE) { + if (TrailingBackslash & !BooleanFlagOn(RequestedOptions, FILE_DIRECTORY_FILE)) + { + return STATUS_OBJECT_NAME_INVALID; + } + Attributes = Stack->Parameters.Create.FileAttributes & ~FILE_ATTRIBUTE_NORMAL; if (!BooleanFlagOn(RequestedOptions, FILE_DIRECTORY_FILE)) Attributes |= FILE_ATTRIBUTE_ARCHIVE; @@ -779,6 +794,11 @@ { VfatCloseFile (DeviceExt, FileObject); return STATUS_NOT_A_DIRECTORY; + } + if (!vfatFCBIsDirectory(pFcb) && TrailingBackslash) + { + VfatCloseFile (DeviceExt, FileObject); + return STATUS_OBJECT_NAME_INVALID; } #ifndef USE_ROS_CC_AND_FS if (!vfatFCBIsDirectory(pFcb))