Fix memory leak in POLYGONFILL_MakeEdgeList when it fail. Modified: trunk/reactos/subsys/win32k/objects/polyfill.c _____
Modified: trunk/reactos/subsys/win32k/objects/polyfill.c --- trunk/reactos/subsys/win32k/objects/polyfill.c 2005-12-29 10:53:01 UTC (rev 20415) +++ trunk/reactos/subsys/win32k/objects/polyfill.c 2005-12-29 11:16:28 UTC (rev 20416) @@ -266,13 +266,15 @@
list->Edges = (FILL_EDGE**)EngAllocMem(FL_ZERO_MEMORY, Count*sizeof(FILL_EDGE*), FILL_EDGE_ALLOC_TAG); if ( !list->Edges ) goto fail; + memset ( list->Edges, 0, Count * sizeof(FILL_EDGE*) );
for ( CurPt = 1; CurPt < Count; ++CurPt ) { e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[CurPt] ); - if ( !e ) + if ( !e ) goto fail; + // if a straight horizontal line - who cares? if ( !e->absdy ) EngFreeMem ( e ); @@ -282,6 +284,7 @@ e = POLYGONFILL_MakeEdge ( Points[CurPt-1], Points[0] ); if ( !e ) goto fail; + if ( !e->absdy ) EngFreeMem ( e ); else @@ -289,6 +292,22 @@ return list;
fail: + if (list != NULL) + { + EngFreeMem(list); + } + + if (list->Edges != NULL) + { + int t; + for (t=0; Count;t++) + { + if (list->Edges[t] != NULL) + EngFreeMem(list->Edges[t]); + } + EngFreeMem(list->Edges); + } + DPRINT1("Out Of MEMORY!!\n"); POLYGONFILL_DestroyEdgeList ( list ); return 0;