Correctly interpret the cell type in CmiDestroyCell. Patch by brbak <mpd000@yahoo.de>.

svn path=/trunk/; revision=18064
This commit is contained in:
Filip Navara 2005-09-25 18:07:36 +00:00
parent 8b950fec34
commit b14657cd56

View file

@ -3456,14 +3456,20 @@ CmiDestroyCell (PREGISTRY_HIVE RegistryHive,
else
{
PCELL_HEADER pFree = Cell;
PHASH_TABLE_CELL pHash = Cell;
LONG CellSize;
if (pFree->CellSize < 0)
pFree->CellSize = -pFree->CellSize;
/* Clear block (except the block size) */
RtlZeroMemory(((char*)pFree) + sizeof(ULONG),
pFree->CellSize - sizeof(ULONG));
if (pHash->Id == REG_HASH_TABLE_CELL_ID)
CellSize = sizeof(HASH_TABLE_CELL) + pHash->HashTableSize * sizeof(HASH_RECORD);
else
CellSize = abs(pFree->CellSize);
/* Clear block */
RtlZeroMemory(pFree, CellSize);
/* restore CellSize */
pFree->CellSize = CellSize;
/* Add block to the list of free blocks */
CmiAddFree(RegistryHive, Cell, CellOffset, TRUE);