Thomas Faber : gdi32: Avoid uninitialized variable use in EnumEnhMetaFile (MSVC).

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 30 10:12:59 CDT 2015


Module: wine
Branch: master
Commit: 8a390c8661ad3975d13aeae1f9953822d4c42461
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8a390c8661ad3975d13aeae1f9953822d4c42461

Author: Thomas Faber <thomas.faber at reactos.org>
Date:   Sat Mar 28 13:29:06 2015 +0100

gdi32: Avoid uninitialized variable use in EnumEnhMetaFile (MSVC).

---

 dlls/gdi32/enhmetafile.c | 123 +++++++++++++++++++++++------------------------
 1 file changed, 61 insertions(+), 62 deletions(-)

diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c
index 61f541f..7fb0b34 100644
--- a/dlls/gdi32/enhmetafile.c
+++ b/dlls/gdi32/enhmetafile.c
@@ -2288,6 +2288,7 @@ BOOL WINAPI EnumEnhMetaFile(
 	SetLastError(ERROR_NOT_ENOUGH_MEMORY);
 	return FALSE;
     }
+    info->state.mode = MM_TEXT;
     info->state.wndOrgX = 0;
     info->state.wndOrgY = 0;
     info->state.wndExtX = 1;
@@ -2338,71 +2339,69 @@ BOOL WINAPI EnumEnhMetaFile(
         old_arcdir = SetArcDirection(hdc, AD_COUNTERCLOCKWISE);
         old_polyfill = SetPolyFillMode(hdc, ALTERNATE);
         old_stretchblt = SetStretchBltMode(hdc, BLACKONWHITE);
-    }
-
-    info->state.mode = MM_TEXT;
 
-    if ( IS_WIN9X() )
-    {
-        /* Win95 leaves the vp/win ext/org info alone */
-        info->init_transform.eM11 = 1.0;
-        info->init_transform.eM12 = 0.0;
-        info->init_transform.eM21 = 0.0;
-        info->init_transform.eM22 = 1.0;
-        info->init_transform.eDx  = 0.0;
-        info->init_transform.eDy  = 0.0;
-    }
-    else
-    {
-        /* WinNT combines the vp/win ext/org info into a transform */
-        double xscale, yscale;
-        xscale = (double)vp_size.cx / (double)win_size.cx;
-        yscale = (double)vp_size.cy / (double)win_size.cy;
-        info->init_transform.eM11 = xscale;
-        info->init_transform.eM12 = 0.0;
-        info->init_transform.eM21 = 0.0;
-        info->init_transform.eM22 = yscale;
-        info->init_transform.eDx  = (double)vp_org.x - xscale * (double)win_org.x;
-        info->init_transform.eDy  = (double)vp_org.y - yscale * (double)win_org.y;
-
-        CombineTransform(&info->init_transform, &savedXform, &info->init_transform);
-    }
+        if ( IS_WIN9X() )
+        {
+            /* Win95 leaves the vp/win ext/org info alone */
+            info->init_transform.eM11 = 1.0;
+            info->init_transform.eM12 = 0.0;
+            info->init_transform.eM21 = 0.0;
+            info->init_transform.eM22 = 1.0;
+            info->init_transform.eDx  = 0.0;
+            info->init_transform.eDy  = 0.0;
+        }
+        else
+        {
+            /* WinNT combines the vp/win ext/org info into a transform */
+            double xscale, yscale;
+            xscale = (double)vp_size.cx / (double)win_size.cx;
+            yscale = (double)vp_size.cy / (double)win_size.cy;
+            info->init_transform.eM11 = xscale;
+            info->init_transform.eM12 = 0.0;
+            info->init_transform.eM21 = 0.0;
+            info->init_transform.eM22 = yscale;
+            info->init_transform.eDx  = (double)vp_org.x - xscale * (double)win_org.x;
+            info->init_transform.eDy  = (double)vp_org.y - yscale * (double)win_org.y;
+
+            CombineTransform(&info->init_transform, &savedXform, &info->init_transform);
+        }
 
-    if ( lpRect && WIDTH(emh->rclFrame) && HEIGHT(emh->rclFrame) )
-    {
-        double xSrcPixSize, ySrcPixSize, xscale, yscale;
-        XFORM xform;
-
-        TRACE("rect: %d,%d - %d,%d. rclFrame: %d,%d - %d,%d\n",
-           lpRect->left, lpRect->top, lpRect->right, lpRect->bottom,
-           emh->rclFrame.left, emh->rclFrame.top, emh->rclFrame.right,
-           emh->rclFrame.bottom);
-
-        xSrcPixSize = (double) emh->szlMillimeters.cx / emh->szlDevice.cx;
-        ySrcPixSize = (double) emh->szlMillimeters.cy / emh->szlDevice.cy;
-        xscale = (double) WIDTH(*lpRect) * 100.0 /
-                 WIDTH(emh->rclFrame) * xSrcPixSize;
-        yscale = (double) HEIGHT(*lpRect) * 100.0 /
-                 HEIGHT(emh->rclFrame) * ySrcPixSize;
-        TRACE("xscale = %f, yscale = %f\n", xscale, yscale);
-
-        xform.eM11 = xscale;
-        xform.eM12 = 0;
-        xform.eM21 = 0;
-        xform.eM22 = yscale;
-        xform.eDx = (double) lpRect->left - (double) WIDTH(*lpRect) / WIDTH(emh->rclFrame) * emh->rclFrame.left;
-        xform.eDy = (double) lpRect->top - (double) HEIGHT(*lpRect) / HEIGHT(emh->rclFrame) * emh->rclFrame.top;
-
-        CombineTransform(&info->init_transform, &xform, &info->init_transform);
-    }
+        if ( lpRect && WIDTH(emh->rclFrame) && HEIGHT(emh->rclFrame) )
+        {
+            double xSrcPixSize, ySrcPixSize, xscale, yscale;
+            XFORM xform;
+
+            TRACE("rect: %d,%d - %d,%d. rclFrame: %d,%d - %d,%d\n",
+               lpRect->left, lpRect->top, lpRect->right, lpRect->bottom,
+               emh->rclFrame.left, emh->rclFrame.top, emh->rclFrame.right,
+               emh->rclFrame.bottom);
+
+            xSrcPixSize = (double) emh->szlMillimeters.cx / emh->szlDevice.cx;
+            ySrcPixSize = (double) emh->szlMillimeters.cy / emh->szlDevice.cy;
+            xscale = (double) WIDTH(*lpRect) * 100.0 /
+                     WIDTH(emh->rclFrame) * xSrcPixSize;
+            yscale = (double) HEIGHT(*lpRect) * 100.0 /
+                     HEIGHT(emh->rclFrame) * ySrcPixSize;
+            TRACE("xscale = %f, yscale = %f\n", xscale, yscale);
+
+            xform.eM11 = xscale;
+            xform.eM12 = 0;
+            xform.eM21 = 0;
+            xform.eM22 = yscale;
+            xform.eDx = (double) lpRect->left - (double) WIDTH(*lpRect) / WIDTH(emh->rclFrame) * emh->rclFrame.left;
+            xform.eDy = (double) lpRect->top - (double) HEIGHT(*lpRect) / HEIGHT(emh->rclFrame) * emh->rclFrame.top;
+
+            CombineTransform(&info->init_transform, &xform, &info->init_transform);
+        }
 
-    /* WinNT resets the current vp/win org/ext */
-    if ( !IS_WIN9X() && hdc )
-    {
-        SetMapMode(hdc, MM_TEXT);
-        SetWindowOrgEx(hdc, 0, 0, NULL);
-        SetViewportOrgEx(hdc, 0, 0, NULL);
-        EMF_Update_MF_Xform(hdc, info);
+        /* WinNT resets the current vp/win org/ext */
+        if ( !IS_WIN9X() )
+        {
+            SetMapMode(hdc, MM_TEXT);
+            SetWindowOrgEx(hdc, 0, 0, NULL);
+            SetViewportOrgEx(hdc, 0, 0, NULL);
+            EMF_Update_MF_Xform(hdc, info);
+        }
     }
 
     ret = TRUE;




More information about the wine-cvs mailing list