Sorry, I should have spotted this when I was in here.. I think this takes care of the leak and crash. Wine testing is back with the same errors. So we are good to go.

svn path=/trunk/; revision=33857
This commit is contained in:
James Tabor 2008-06-04 17:45:18 +00:00
parent a1aca981cf
commit e61ef65c4a

View file

@ -95,7 +95,7 @@ IntGdiExtCreatePen(
// If dwPenStyle is PS_COSMETIC, the width must be set to 1. // If dwPenStyle is PS_COSMETIC, the width must be set to 1.
if ( !(bOldStylePen) && ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) && ( dwWidth != 1) ) if ( !(bOldStylePen) && ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) && ( dwWidth != 1) )
goto EEXIT; goto ExitCleanup;
switch (dwPenStyle & PS_STYLE_MASK) switch (dwPenStyle & PS_STYLE_MASK)
{ {
@ -109,7 +109,7 @@ IntGdiExtCreatePen(
case PS_ALTERNATE: case PS_ALTERNATE:
/* PS_ALTERNATE is applicable only for cosmetic pens */ /* PS_ALTERNATE is applicable only for cosmetic pens */
if ((dwPenStyle & PS_TYPE_MASK) == PS_GEOMETRIC) goto EEXIT; if ((dwPenStyle & PS_TYPE_MASK) == PS_GEOMETRIC) goto ExitCleanup;
PenObject->flAttrs |= GDIBRUSH_IS_BITMAP; PenObject->flAttrs |= GDIBRUSH_IS_BITMAP;
PenObject->hbmPattern = IntGdiCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternAlternate); PenObject->hbmPattern = IntGdiCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternAlternate);
break; break;
@ -137,7 +137,7 @@ IntGdiExtCreatePen(
case PS_INSIDEFRAME: case PS_INSIDEFRAME:
/* FIXME: does it need some additional work? */ /* FIXME: does it need some additional work? */
/* PS_INSIDEFRAME is applicable only for geometric pens */ /* PS_INSIDEFRAME is applicable only for geometric pens */
if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) goto EEXIT; if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) goto ExitCleanup;
PenObject->flAttrs |= (GDIBRUSH_IS_SOLID|GDIBRUSH_IS_INSIDEFRAME); PenObject->flAttrs |= (GDIBRUSH_IS_SOLID|GDIBRUSH_IS_INSIDEFRAME);
break; break;
@ -162,7 +162,7 @@ IntGdiExtCreatePen(
if(all_zero || has_neg) if(all_zero || has_neg)
{ {
goto EEXIT; goto ExitCleanup;
} }
} }
/* FIXME: what style here? */ /* FIXME: what style here? */
@ -175,8 +175,13 @@ IntGdiExtCreatePen(
PENOBJ_UnlockPen(PenObject); PENOBJ_UnlockPen(PenObject);
return hPen; return hPen;
EEXIT: ExitCleanup:
SetLastWin32Error(ERROR_INVALID_PARAMETER); SetLastWin32Error(ERROR_INVALID_PARAMETER);
if (PenObject->pStyle)
{
ExFreePool(PenObject->pStyle);
PenObject->pStyle = NULL;
}
PENOBJ_UnlockPen(PenObject); PENOBJ_UnlockPen(PenObject);
if (bOldStylePen) if (bOldStylePen)
PENOBJ_FreePenByHandle(hPen); PENOBJ_FreePenByHandle(hPen);
@ -339,11 +344,6 @@ NtGdiExtCreatePen(
bOldStylePen, bOldStylePen,
hBrush); hBrush);
if (!hPen && pSafeStyle)
{
ExFreePool(pSafeStyle);
}
// BRUSH_Cleanup takes care of pSafeStyle when deleteing the pen
return hPen; return hPen;
} }