In a call to EnumEnhMetaFile when hdc is NULL, lpRect may be NULL. Add

a test for this.
This commit is contained in:
Huw Davies 2005-03-29 18:56:35 +00:00 committed by Alexandre Julliard
parent 9be7f2789f
commit 8710dde01f
2 changed files with 8 additions and 3 deletions

View File

@ -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);

View File

@ -43,6 +43,8 @@ static int CALLBACK emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
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)
@ -190,6 +192,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());
ret = ReleaseDC(hwnd, hdcDisplay);