[FASTFAT] Fix size checking in VfatGetFileNameInformation()

This commit is contained in:
Pierre Schweitzer 2017-12-09 12:45:16 +01:00
parent 9f3c80193e
commit 28343c6c0c
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -101,17 +101,17 @@ VfatGetFileNameInformation(
*Written = 0; *Written = 0;
Status = STATUS_BUFFER_OVERFLOW; Status = STATUS_BUFFER_OVERFLOW;
if (FIELD_OFFSET(FILE_NAMES_INFORMATION, FileName) > BufferLength) if (FIELD_OFFSET(FILE_NAME_INFORMATION, FileName) > BufferLength)
return Status; return Status;
if (First || (BufferLength >= FIELD_OFFSET(FILE_NAMES_INFORMATION, FileName) + DirContext->LongNameU.Length)) if (First || (BufferLength >= FIELD_OFFSET(FILE_NAME_INFORMATION, FileName) + DirContext->LongNameU.Length))
{ {
pInfo->FileNameLength = DirContext->LongNameU.Length; pInfo->FileNameLength = DirContext->LongNameU.Length;
*Written = FIELD_OFFSET(FILE_NAMES_INFORMATION, FileName); *Written = FIELD_OFFSET(FILE_NAME_INFORMATION, FileName);
if (BufferLength > FIELD_OFFSET(FILE_NAMES_INFORMATION, FileName)) if (BufferLength > FIELD_OFFSET(FILE_NAME_INFORMATION, FileName))
{ {
BytesToCopy = min(DirContext->LongNameU.Length, BufferLength - FIELD_OFFSET(FILE_NAMES_INFORMATION, FileName)); BytesToCopy = min(DirContext->LongNameU.Length, BufferLength - FIELD_OFFSET(FILE_NAME_INFORMATION, FileName));
RtlCopyMemory(pInfo->FileName, RtlCopyMemory(pInfo->FileName,
DirContext->LongNameU.Buffer, DirContext->LongNameU.Buffer,
BytesToCopy); BytesToCopy);