[PATCH 1/3] gdiplus: Don't call PlayEnhMetaFileRecord for records handled by gdiplus
Andrew Eikum
aeikum at codeweavers.com
Thu Aug 24 11:26:49 CDT 2017
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
Following patch shows that PlayEnhMetaFileRecord fails for some record
types when given a different HDC than EnumEnhMetaFile was given.
dlls/gdiplus/metafile.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 0bd3033a1d..6260cb3c18 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -1423,8 +1423,6 @@ GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile *metafile,
/* regular EMF record */
if (metafile->playback_dc)
{
- ENHMETARECORD *record;
-
switch (recordType)
{
case EMR_SETMAPMODE:
@@ -1469,24 +1467,27 @@ GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile *metafile,
return Ok;
}
default:
- break;
- }
-
- record = heap_alloc_zero(dataSize + 8);
-
- if (record)
{
- record->iType = recordType;
- record->nSize = dataSize + 8;
- memcpy(record->dParm, data, dataSize);
+ ENHMETARECORD *record = heap_alloc_zero(dataSize + 8);
- PlayEnhMetaFileRecord(metafile->playback_dc, metafile->handle_table,
- record, metafile->handle_count);
+ if (record)
+ {
+ record->iType = recordType;
+ record->nSize = dataSize + 8;
+ memcpy(record->dParm, data, dataSize);
- heap_free(record);
+ if(PlayEnhMetaFileRecord(metafile->playback_dc, metafile->handle_table,
+ record, metafile->handle_count) == 0)
+ ERR("PlayEnhMetaFileRecord failed\n");
+
+ heap_free(record);
+ }
+ else
+ return OutOfMemory;
+
+ break;
+ }
}
- else
- return OutOfMemory;
}
}
else
--
2.14.1
More information about the wine-patches
mailing list