diff --git a/drivers/filesystems/fastfat/create.c b/drivers/filesystems/fastfat/create.c index aadc990e37..bef178cad6 100644 --- a/drivers/filesystems/fastfat/create.c +++ b/drivers/filesystems/fastfat/create.c @@ -791,6 +791,11 @@ VfatCreateFile( Attributes |= FILE_ATTRIBUTE_ARCHIVE; } vfatSplitPathName(&PathNameU, NULL, &FileNameU); + + if ((FileNameU.Length == sizeof(WCHAR) && FileNameU.Buffer[0] == L'.') || + (FileNameU.Length == 2 * sizeof(WCHAR) && FileNameU.Buffer[0] == L'.' && FileNameU.Buffer[1] == L'.')) + return STATUS_OBJECT_NAME_INVALID; + Status = VfatAddEntry(DeviceExt, &FileNameU, &pFcb, ParentFcb, RequestedOptions, Attributes, NULL); vfatReleaseFCB(DeviceExt, ParentFcb); diff --git a/drivers/filesystems/fastfat/finfo.c b/drivers/filesystems/fastfat/finfo.c index 755ba6a991..74cc2935d2 100644 --- a/drivers/filesystems/fastfat/finfo.c +++ b/drivers/filesystems/fastfat/finfo.c @@ -831,6 +831,11 @@ VfatSetRenameInformation( (vfatFCBIsDirectory(FCB) ? FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME), FILE_ACTION_RENAMED_OLD_NAME); + + if ((NewFile.Length == sizeof(WCHAR) && NewFile.Buffer[0] == L'.') || + (NewFile.Length == 2 * sizeof(WCHAR) && NewFile.Buffer[0] == L'.' && NewFile.Buffer[1] == L'.')) + return STATUS_OBJECT_NAME_INVALID; + Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, TRUE); if (NT_SUCCESS(Status)) { @@ -864,6 +869,11 @@ VfatSetRenameInformation( (vfatFCBIsDirectory(FCB) ? FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME), (DeletedTarget ? FILE_ACTION_REMOVED : FILE_ACTION_RENAMED_OLD_NAME)); + + if ((NewFile.Length == sizeof(WCHAR) && NewFile.Buffer[0] == L'.') || + (NewFile.Length == 2 * sizeof(WCHAR) && NewFile.Buffer[0] == L'.' && NewFile.Buffer[1] == L'.')) + return STATUS_OBJECT_NAME_INVALID; + Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, FALSE); if (NT_SUCCESS(Status)) { @@ -920,6 +930,11 @@ VfatSetRenameInformation( (vfatFCBIsDirectory(FCB) ? FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME), FILE_ACTION_REMOVED); + + if ((NewFile.Length == sizeof(WCHAR) && NewFile.Buffer[0] == L'.') || + (NewFile.Length == 2 * sizeof(WCHAR) && NewFile.Buffer[0] == L'.' && NewFile.Buffer[1] == L'.')) + return STATUS_OBJECT_NAME_INVALID; + Status = VfatMoveEntry(DeviceExt, FCB, &NewFile, ParentFCB); if (NT_SUCCESS(Status)) {