Commit 1be295fb authored by Troy Rollo's avatar Troy Rollo Committed by Alexandre Julliard

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).
parent 3b95aad5
...@@ -4812,21 +4812,6 @@ BOOL BlockChainStream_SetSize( ...@@ -4812,21 +4812,6 @@ BOOL BlockChainStream_SetSize(
} }
else 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); BlockChainStream_Enlarge(This, newSize);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment