Never allocate 0 bytes. Fixes bug 1082. Modified: trunk/reactos/subsys/win32k/objects/region.c _____
Modified: trunk/reactos/subsys/win32k/objects/region.c --- trunk/reactos/subsys/win32k/objects/region.c 2005-12-09 17:11:20 UTC (rev 20009) +++ trunk/reactos/subsys/win32k/objects/region.c 2005-12-09 17:56:26 UTC (rev 20010) @@ -405,7 +405,11 @@
static __inline int xmemcheck(ROSRGNDATA *reg, PRECT *rect, PRECT *firstrect ) { if ( (reg->rdh.nCount+1)*sizeof( RECT ) >= reg->rdh.nRgnSize ) { PRECT temp; - temp = ExAllocatePoolWithTag( PagedPool, (2 * (reg->rdh.nRgnSize)), TAG_REGION); + DWORD NewSize = 2 * reg->rdh.nRgnSize; + if (NewSize < (reg->rdh.nCount + 1) * sizeof(RECT)) { + NewSize = (reg->rdh.nCount + 1) * sizeof(RECT); + } + temp = ExAllocatePoolWithTag( PagedPool, NewSize, TAG_REGION);
if (temp == 0) return 0; @@ -413,7 +417,7 @@ /* copy the rectangles */ COPY_RECTS(temp, *firstrect, reg->rdh.nCount);
- reg->rdh.nRgnSize *= 2; + reg->rdh.nRgnSize = NewSize; if (*firstrect != ®->rdh.rcBound) ExFreePool( *firstrect ); *firstrect = temp;