diff --git a/doc/WinFsp-Tutorial.asciidoc b/doc/WinFsp-Tutorial.asciidoc index 2e74f348..18471969 100644 --- a/doc/WinFsp-Tutorial.asciidoc +++ b/doc/WinFsp-Tutorial.asciidoc @@ -622,9 +622,14 @@ static NTSTATUS ReadDirectory(FSP_FILE_SYSTEM *FileSystem, Length = GetFinalPathNameByHandleW(Handle, FullPath, FULLPATH_SIZE - 1, 0); if (0 == Length) - return FspNtStatusFromWin32(GetLastError()); - if (Length + 1 + PatternLength >= FULLPATH_SIZE) - return STATUS_OBJECT_NAME_INVALID; + DirBufferResult = FspNtStatusFromWin32(GetLastError()); + else if (Length + 1 + PatternLength >= FULLPATH_SIZE) + DirBufferResult = STATUS_OBJECT_NAME_INVALID; + if (!NT_SUCCESS(DirBufferResult)) + { + FspFileSystemReleaseDirectoryBuffer(&FileContext->DirBuffer); + return DirBufferResult; + } if (L'\\' != FullPath[Length - 1]) FullPath[Length++] = L'\\'; diff --git a/tst/passthrough/passthrough.c b/tst/passthrough/passthrough.c index 1c73e3a0..2eef2a45 100644 --- a/tst/passthrough/passthrough.c +++ b/tst/passthrough/passthrough.c @@ -538,9 +538,14 @@ static NTSTATUS ReadDirectory(FSP_FILE_SYSTEM *FileSystem, Length = GetFinalPathNameByHandleW(Handle, FullPath, FULLPATH_SIZE - 1, 0); if (0 == Length) - return FspNtStatusFromWin32(GetLastError()); - if (Length + 1 + PatternLength >= FULLPATH_SIZE) - return STATUS_OBJECT_NAME_INVALID; + DirBufferResult = FspNtStatusFromWin32(GetLastError()); + else if (Length + 1 + PatternLength >= FULLPATH_SIZE) + DirBufferResult = STATUS_OBJECT_NAME_INVALID; + if (!NT_SUCCESS(DirBufferResult)) + { + FspFileSystemReleaseDirectoryBuffer(&FileContext->DirBuffer); + return DirBufferResult; + } if (L'\\' != FullPath[Length - 1]) FullPath[Length++] = L'\\';