From 1be295fb471fdd0606f0d57cce22804dd7a1086c Mon Sep 17 00:00:00 2001 From: Troy Rollo Date: Tue, 23 May 2006 11:42:25 +1000 Subject: [PATCH] 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). --- dlls/ole32/storage32.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c index a42841aa585..6c2ec605276 100644 --- a/dlls/ole32/storage32.c +++ b/dlls/ole32/storage32.c @@ -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); }