[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