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/fastfa…
==============================================================================
--- 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))