gdi32: don't access DC in PolyDraw after releasing handle [try2]

Evan Stade estade at gmail.com
Tue Jul 3 21:06:34 CDT 2007


Hi,

[try2] no whitespace modifications

Changelog:
* changed way PolyDraw returns a result

 dlls/gdi32/painting.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c
index 1b30d6d..3e84f60 100644
--- a/dlls/gdi32/painting.c
+++ b/dlls/gdi32/painting.c
@@ -833,18 +833,18 @@ BOOL WINAPI PolyDraw(HDC hdc, const POIN
     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 POIN
 	    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 POIN
 	}
     }
 
-    return TRUE;
+    result = TRUE;
+end:
+    GDI_ReleaseObj( hdc );
+    return result;
 }
 
 
-- 
1.4.1


More information about the wine-patches mailing list