From 3d166388d3f692dde85706b54e7ef5fe1d364b07 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 4 Dec 2009 06:47:23 +0000 Subject: [PATCH] [Win32k] - Patch by Huw Davies huw@codeweavers.com : Fix incorrect initialization of path array. - Patch was modified from wine. Tested with Area.exe path test, still fails. svn path=/trunk/; revision=44397 --- .../subsystems/win32/win32k/objects/path.c | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index efd511c8312..6b5fbfd363e 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -1504,9 +1504,9 @@ BOOL FASTCALL PATH_WidenPath(DC *dc) { - INT i, j, numStrokes, numOldStrokes, penWidth, penWidthIn, penWidthOut, size, penStyle; + INT i, j, numStrokes, penWidth, penWidthIn, penWidthOut, size, penStyle; BOOL ret = FALSE; - PPATH pPath, pNewPath, *pStrokes, *pOldStrokes, pUpPath, pDownPath; + PPATH pPath, pNewPath, *pStrokes = NULL, *pOldStrokes, pUpPath, pDownPath; EXTLOGPEN *elp; DWORD obj_type, joint, endcap, penType; PDC_ATTR pdcattr = dc->pdcattr; @@ -1572,14 +1572,6 @@ PATH_WidenPath(DC *dc) penWidthOut++; numStrokes = 0; - numOldStrokes = 1; - - pStrokes = ExAllocatePoolWithTag(PagedPool, sizeof(PPATH), TAG_PATH); - pStrokes[0] = ExAllocatePoolWithTag(PagedPool, sizeof(PATH), TAG_PATH); - PATH_InitGdiPath(pStrokes[0]); - pStrokes[0]->pFlags = ExAllocatePoolWithTag(PagedPool, pPath->numEntriesUsed * sizeof(INT), TAG_PATH); - pStrokes[0]->pPoints = ExAllocatePoolWithTag(PagedPool, pPath->numEntriesUsed * sizeof(POINT), TAG_PATH); - pStrokes[0]->numEntriesUsed = 0; for(i = 0, j = 0; i < pPath->numEntriesUsed; i++, j++) { @@ -1601,11 +1593,17 @@ PATH_WidenPath(DC *dc) } numStrokes++; j = 0; - pOldStrokes = pStrokes; // Save old pointer. - pStrokes = ExAllocatePoolWithTag(PagedPool, numStrokes * sizeof(PPATH), TAG_PATH); - RtlCopyMemory(pStrokes, pOldStrokes, numOldStrokes * sizeof(PPATH)); - numOldStrokes = numStrokes; // Save orig count. - ExFreePoolWithTag(pOldStrokes, TAG_PATH); // Free old pointer. + if (numStrokes == 1) + pStrokes = ExAllocatePoolWithTag(PagedPool, numStrokes * sizeof(PPATH), TAG_PATH); + else + { + pOldStrokes = pStrokes; // Save old pointer. + pStrokes = ExAllocatePoolWithTag(PagedPool, numStrokes * sizeof(PPATH), TAG_PATH); + if (!pStrokes) return FALSE; + RtlCopyMemory(pStrokes, pOldStrokes, numStrokes * sizeof(PPATH)); + ExFreePoolWithTag(pOldStrokes, TAG_PATH); // Free old pointer. + } + if (!pStrokes) return FALSE; pStrokes[numStrokes - 1] = ExAllocatePoolWithTag(PagedPool, sizeof(PATH), TAG_PATH); PATH_InitGdiPath(pStrokes[numStrokes - 1]);