From 53e05015f6d5bfb6c2418775688143c7894b4459 Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Tue, 3 Jul 2007 19:06:34 -0700 Subject: [PATCH] gdi32: Don't access DC in PolyDraw after releasing handle. --- dlls/gdi32/painting.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c index 1b30d6d5cc3..3e84f60bf07 100644 --- a/dlls/gdi32/painting.c +++ b/dlls/gdi32/painting.c @@ -833,18 +833,18 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes, if(dc->funcs->pPolyDraw) { result = dc->funcs->pPolyDraw( dc->physDev, lppt, lpbTypes, cCount ); - GDI_ReleaseObj( hdc ); - return result; + goto end; } - GDI_ReleaseObj( hdc ); /* check for each bezierto if there are two more points */ for( i = 0; i < cCount; i++ ) if( lpbTypes[i] != PT_MOVETO && lpbTypes[i] & PT_BEZIERTO ) { - if( cCount < i+3 ) - return FALSE; + if( cCount < i+3 ){ + result = FALSE; + goto end; + } else i += 2; } @@ -869,8 +869,10 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes, PolyBezierTo( hdc, &lppt[i], 3 ); i += 2; } - else - return FALSE; + else{ + result = FALSE; + goto end; + } if( lpbTypes[i] & PT_CLOSEFIGURE ) { @@ -881,7 +883,10 @@ BOOL WINAPI PolyDraw(HDC hdc, const POINT *lppt, const BYTE *lpbTypes, } } - return TRUE; + result = TRUE; +end: + GDI_ReleaseObj( hdc ); + return result; }