emf: fix for EnumEnhMetaFile with a null hdc
Huw D M Davies
h.davies1 at physics.ox.ac.uk
Tue Mar 29 08:18:43 CST 2005
Huw Davies <huw at codeweavers.com>
In a call to EnumEnhMetaFile when hdc is NULL, lpRect may be
NULL.
Add a test for this.
--
Huw Davies
huw at codeweavers.com
Index: dlls/gdi/enhmetafile.c
===================================================================
RCS file: /home/wine/wine/dlls/gdi/enhmetafile.c,v
retrieving revision 1.10
diff -u -p -r1.10 enhmetafile.c
--- dlls/gdi/enhmetafile.c 23 Mar 2005 13:15:19 -0000 1.10
+++ dlls/gdi/enhmetafile.c 29 Mar 2005 14:16:01 -0000
@@ -2147,7 +2147,7 @@ BOOL WINAPI EnumEnhMetaFile(
INT mapMode = MM_TEXT;
COLORREF old_text_color = 0, old_bk_color = 0;
- if(!lpRect)
+ if(!lpRect && hdc)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
@@ -2228,7 +2228,7 @@ BOOL WINAPI EnumEnhMetaFile(
CombineTransform(&info->init_transform, &savedXform, &info->init_transform);
}
- if ( WIDTH(emh->rclFrame) && HEIGHT(emh->rclFrame) )
+ if ( lpRect && WIDTH(emh->rclFrame) && HEIGHT(emh->rclFrame) )
{
FLOAT xSrcPixSize, ySrcPixSize, xscale, yscale;
XFORM xform;
@@ -2256,7 +2256,7 @@ BOOL WINAPI EnumEnhMetaFile(
}
/* WinNT resets the current vp/win org/ext */
- if ( !IS_WIN9X() )
+ if ( !IS_WIN9X() && hdc )
{
SetMapMode(hdc, MM_TEXT);
SetWindowOrgEx(hdc, 0, 0, NULL);
Index: dlls/gdi/tests/metafile.c
===================================================================
RCS file: /home/wine/wine/dlls/gdi/tests/metafile.c,v
retrieving revision 1.6
diff -u -p -r1.6 metafile.c
--- dlls/gdi/tests/metafile.c 14 Feb 2005 21:04:45 -0000 1.6
+++ dlls/gdi/tests/metafile.c 29 Mar 2005 14:16:01 -0000
@@ -43,6 +43,8 @@ static int CALLBACK emf_enum_proc(HDC hd
trace("hdc %p, emr->iType %ld, emr->nSize %ld, param %p\n",
hdc, emr->iType, emr->nSize, (void *)param);
+ if(!hdc) return 1;
+
PlayEnhMetaFileRecord(hdc, handle_table, emr, n_objs);
switch (emr->iType)
@@ -189,6 +191,9 @@ static void test_ExtTextOut(void)
ok(!EnumEnhMetaFile(hdcDisplay, hMetafile, emf_enum_proc, dx, NULL),
"A valid hdc has to require a valid rc\n");
+
+ ok(EnumEnhMetaFile(NULL, hMetafile, emf_enum_proc, dx, NULL),
+ "A null hdc does not require a valid rc\n");
ret = DeleteEnhMetaFile(hMetafile);
ok( ret, "DeleteEnhMetaFile error %ld\n", GetLastError());
More information about the wine-patches
mailing list