mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspFsvolQueryFsAttributeInformation: fix buffer overrun error
This commit is contained in:
parent
5798527237
commit
8eebfe811d
@ -82,6 +82,8 @@ static NTSTATUS FspFsvolQueryFsAttributeInformation(
|
||||
UNICODE_STRING FileSystemName;
|
||||
WCHAR FileSystemNameBuf[16 + FSP_FSCTL_VOLUME_FSNAME_SIZE / sizeof(WCHAR)];
|
||||
|
||||
ASSERT(sizeof FileSystemNameBuf >= sizeof L"" DRIVER_NAME + FSP_FSCTL_VOLUME_FSNAME_SIZE);
|
||||
|
||||
Info->FileSystemAttributes =
|
||||
(FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch ? FILE_CASE_SENSITIVE_SEARCH : 0) |
|
||||
(FsvolDeviceExtension->VolumeParams.CasePreservedNames ? FILE_CASE_PRESERVED_NAMES : 0) |
|
||||
@ -96,17 +98,15 @@ static NTSTATUS FspFsvolQueryFsAttributeInformation(
|
||||
|
||||
RtlInitUnicodeString(&FileSystemName, FsvolDeviceExtension->VolumeParams.FileSystemName);
|
||||
|
||||
ASSERT(sizeof FileSystemNameBuf >= sizeof L"" DRIVER_NAME + FSP_FSCTL_VOLUME_FSNAME_SIZE);
|
||||
|
||||
CopyLength = sizeof L"" DRIVER_NAME - sizeof(WCHAR);
|
||||
RtlCopyMemory(FileSystemNameBuf, L"" DRIVER_NAME, CopyLength);
|
||||
if (0 != FileSystemName.Length)
|
||||
{
|
||||
FileSystemNameBuf[CopyLength / sizeof(WCHAR)] = L'_';
|
||||
FileSystemNameBuf[CopyLength / sizeof(WCHAR)] = L'-';
|
||||
CopyLength += sizeof(WCHAR);
|
||||
RtlCopyMemory(FileSystemNameBuf + CopyLength / sizeof(WCHAR), FileSystemName.Buffer,
|
||||
FileSystemName.Length * sizeof(WCHAR));
|
||||
CopyLength += FileSystemName.Length * sizeof(WCHAR);
|
||||
FileSystemName.Length);
|
||||
CopyLength += FileSystemName.Length;
|
||||
}
|
||||
|
||||
Info->FileSystemNameLength = CopyLength;
|
||||
|
@ -169,6 +169,7 @@ static NTSTATUS FspVolumeCreateNoLock(
|
||||
if (I == PrefixLength)
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
VolumeParams.FileSystemName[sizeof VolumeParams.FileSystemName / sizeof(WCHAR) - 1] = L'\0';
|
||||
|
||||
/* create volume guid */
|
||||
Result = FspCreateGuid(&Guid);
|
||||
|
@ -496,7 +496,7 @@ void getvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
||||
ASSERT(255 == MaxComponentLength);
|
||||
ASSERT(0 != (FileSystemFlags &
|
||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp_MEMFS"));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp-MEMFS"));
|
||||
}
|
||||
|
||||
Success = GetDiskFreeSpaceW(FilePath, &SectorsPerCluster, &BytesPerSector, &FreeClusters, &TotalClusters);
|
||||
@ -573,7 +573,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
||||
ASSERT(255 == MaxComponentLength);
|
||||
ASSERT(0 != (FileSystemFlags &
|
||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp_MEMFS"));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp-MEMFS"));
|
||||
}
|
||||
|
||||
Success = SetVolumeLabelW(FilePath, L"TestLabel");
|
||||
@ -590,7 +590,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
||||
ASSERT(255 == MaxComponentLength);
|
||||
ASSERT(0 != (FileSystemFlags &
|
||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp_MEMFS"));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp-MEMFS"));
|
||||
}
|
||||
|
||||
Success = SetVolumeLabelW(FilePath, L"123456789012345678901234567890123");
|
||||
@ -607,7 +607,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
||||
ASSERT(255 == MaxComponentLength);
|
||||
ASSERT(0 != (FileSystemFlags &
|
||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp_MEMFS"));
|
||||
ASSERT(0 == wcscmp(FileSystemNameBuf, L"WinFsp-MEMFS"));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user