mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -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;
|
UNICODE_STRING FileSystemName;
|
||||||
WCHAR FileSystemNameBuf[16 + FSP_FSCTL_VOLUME_FSNAME_SIZE / sizeof(WCHAR)];
|
WCHAR FileSystemNameBuf[16 + FSP_FSCTL_VOLUME_FSNAME_SIZE / sizeof(WCHAR)];
|
||||||
|
|
||||||
|
ASSERT(sizeof FileSystemNameBuf >= sizeof L"" DRIVER_NAME + FSP_FSCTL_VOLUME_FSNAME_SIZE);
|
||||||
|
|
||||||
Info->FileSystemAttributes =
|
Info->FileSystemAttributes =
|
||||||
(FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch ? FILE_CASE_SENSITIVE_SEARCH : 0) |
|
(FsvolDeviceExtension->VolumeParams.CaseSensitiveSearch ? FILE_CASE_SENSITIVE_SEARCH : 0) |
|
||||||
(FsvolDeviceExtension->VolumeParams.CasePreservedNames ? FILE_CASE_PRESERVED_NAMES : 0) |
|
(FsvolDeviceExtension->VolumeParams.CasePreservedNames ? FILE_CASE_PRESERVED_NAMES : 0) |
|
||||||
@ -96,17 +98,15 @@ static NTSTATUS FspFsvolQueryFsAttributeInformation(
|
|||||||
|
|
||||||
RtlInitUnicodeString(&FileSystemName, FsvolDeviceExtension->VolumeParams.FileSystemName);
|
RtlInitUnicodeString(&FileSystemName, FsvolDeviceExtension->VolumeParams.FileSystemName);
|
||||||
|
|
||||||
ASSERT(sizeof FileSystemNameBuf >= sizeof L"" DRIVER_NAME + FSP_FSCTL_VOLUME_FSNAME_SIZE);
|
|
||||||
|
|
||||||
CopyLength = sizeof L"" DRIVER_NAME - sizeof(WCHAR);
|
CopyLength = sizeof L"" DRIVER_NAME - sizeof(WCHAR);
|
||||||
RtlCopyMemory(FileSystemNameBuf, L"" DRIVER_NAME, CopyLength);
|
RtlCopyMemory(FileSystemNameBuf, L"" DRIVER_NAME, CopyLength);
|
||||||
if (0 != FileSystemName.Length)
|
if (0 != FileSystemName.Length)
|
||||||
{
|
{
|
||||||
FileSystemNameBuf[CopyLength / sizeof(WCHAR)] = L'_';
|
FileSystemNameBuf[CopyLength / sizeof(WCHAR)] = L'-';
|
||||||
CopyLength += sizeof(WCHAR);
|
CopyLength += sizeof(WCHAR);
|
||||||
RtlCopyMemory(FileSystemNameBuf + CopyLength / sizeof(WCHAR), FileSystemName.Buffer,
|
RtlCopyMemory(FileSystemNameBuf + CopyLength / sizeof(WCHAR), FileSystemName.Buffer,
|
||||||
FileSystemName.Length * sizeof(WCHAR));
|
FileSystemName.Length);
|
||||||
CopyLength += FileSystemName.Length * sizeof(WCHAR);
|
CopyLength += FileSystemName.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info->FileSystemNameLength = CopyLength;
|
Info->FileSystemNameLength = CopyLength;
|
||||||
|
@ -169,6 +169,7 @@ static NTSTATUS FspVolumeCreateNoLock(
|
|||||||
if (I == PrefixLength)
|
if (I == PrefixLength)
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
VolumeParams.FileSystemName[sizeof VolumeParams.FileSystemName / sizeof(WCHAR) - 1] = L'\0';
|
||||||
|
|
||||||
/* create volume guid */
|
/* create volume guid */
|
||||||
Result = FspCreateGuid(&Guid);
|
Result = FspCreateGuid(&Guid);
|
||||||
|
@ -496,7 +496,7 @@ void getvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
|||||||
ASSERT(255 == MaxComponentLength);
|
ASSERT(255 == MaxComponentLength);
|
||||||
ASSERT(0 != (FileSystemFlags &
|
ASSERT(0 != (FileSystemFlags &
|
||||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
(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);
|
Success = GetDiskFreeSpaceW(FilePath, &SectorsPerCluster, &BytesPerSector, &FreeClusters, &TotalClusters);
|
||||||
@ -573,7 +573,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
|||||||
ASSERT(255 == MaxComponentLength);
|
ASSERT(255 == MaxComponentLength);
|
||||||
ASSERT(0 != (FileSystemFlags &
|
ASSERT(0 != (FileSystemFlags &
|
||||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
(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");
|
Success = SetVolumeLabelW(FilePath, L"TestLabel");
|
||||||
@ -590,7 +590,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
|||||||
ASSERT(255 == MaxComponentLength);
|
ASSERT(255 == MaxComponentLength);
|
||||||
ASSERT(0 != (FileSystemFlags &
|
ASSERT(0 != (FileSystemFlags &
|
||||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
(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");
|
Success = SetVolumeLabelW(FilePath, L"123456789012345678901234567890123");
|
||||||
@ -607,7 +607,7 @@ void setvolinfo_dotest(ULONG Flags, PWSTR Prefix, ULONG FileInfoTimeout)
|
|||||||
ASSERT(255 == MaxComponentLength);
|
ASSERT(255 == MaxComponentLength);
|
||||||
ASSERT(0 != (FileSystemFlags &
|
ASSERT(0 != (FileSystemFlags &
|
||||||
(FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES | FILE_UNICODE_ON_DISK | FILE_PERSISTENT_ACLS)));
|
(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