Module: wine Branch: master Commit: 2752c3bcd07806a84894eaad5b2c2299d139b1e8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2752c3bcd07806a84894eaad5b...
Author: Vincent Povirk vincent@codeweavers.com Date: Tue Sep 7 19:17:43 2010 -0500
ole32: Don't fail if the file ends during a big block.
Apparently, it's valid for the last block in a file to be incomplete.
---
dlls/ole32/storage32.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index 8b6a3af..5c58201 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -3875,13 +3875,20 @@ static BOOL StorageImpl_ReadBigBlock( void* buffer) { ULARGE_INTEGER ulOffset; - DWORD read; + DWORD read=0;
ulOffset.u.HighPart = 0; ulOffset.u.LowPart = StorageImpl_GetBigBlockOffset(This, blockIndex);
StorageImpl_ReadAt(This, ulOffset, buffer, This->bigBlockSize, &read); - return (read == This->bigBlockSize); + + if (read && read < This->bigBlockSize) + { + /* File ends during this block; fill the rest with 0's. */ + memset((LPBYTE)buffer+read, 0, This->bigBlockSize-read); + } + + return (read != 0); }
static BOOL StorageImpl_ReadDWordFromBigBlock(