ole32: Fix excessive file sizes for Storage files.
The IStorage (DocFile) implementation was adding empty blocks at the end of the file every time a caller wrote data that was not a multiple of 512 bytes. If the caller made a lot of very small writes the file size could be huge even though the data in the file was tiny. This was caused by BlockChainStream_SetSize trying to allocate file blocks for the new data using a condition that bore no relationship to the required condition, and it was not necessary to do so at that time since it is done (the right way) by StorageImpl_GetNextFreeBigBlock (called via BlockChainStream_Enlarge).
This commit is contained in:
parent
3b95aad505
commit
1be295fb47
|
@ -4812,21 +4812,6 @@ BOOL BlockChainStream_SetSize(
|
|||
}
|
||||
else
|
||||
{
|
||||
ULARGE_INTEGER fileSize =
|
||||
BIGBLOCKFILE_GetSize(This->parentStorage->bigBlockFile);
|
||||
|
||||
ULONG diff = newSize.u.LowPart - size.u.LowPart;
|
||||
|
||||
/*
|
||||
* Make sure the file stays a multiple of blocksize
|
||||
*/
|
||||
if ((diff % This->parentStorage->bigBlockSize) != 0)
|
||||
diff += (This->parentStorage->bigBlockSize -
|
||||
(diff % This->parentStorage->bigBlockSize) );
|
||||
|
||||
fileSize.u.LowPart += diff;
|
||||
BIGBLOCKFILE_SetSize(This->parentStorage->bigBlockFile, fileSize);
|
||||
|
||||
BlockChainStream_Enlarge(This, newSize);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue