Vincent Povirk : gdiplus: Don' t require specific gdi+ versions in metafile structures.

Alexandre Julliard julliard at winehq.org
Tue Jul 18 13:58:55 CDT 2017


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Tue Jul 18 11:35:28 2017 -0500

gdiplus: Don't require specific gdi+ versions in metafile structures.

Based on testing of manually edited metafiles, only the signature portion
of version fields are tested, not the version number.

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdiplus/gdiplus_private.h | 1 +
 dlls/gdiplus/region.c          | 5 ++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index 88109d7..d6806cc 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -41,6 +41,7 @@
 
 #define VERSION_MAGIC  0xdbc01001
 #define VERSION_MAGIC2 0xdbc01002
+#define VALID_MAGIC(x) (((x) & 0xfffff000) == 0xdbc01000)
 #define TENSION_CONST (0.3)
 
 #define GIF_DISPOSE_UNSPECIFIED 0
diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
index 35fef8b..390b50f 100644
--- a/dlls/gdiplus/region.c
+++ b/dlls/gdiplus/region.c
@@ -961,7 +961,7 @@ static GpStatus read_element(struct memory_buffer *mbuf, GpRegion *region, regio
             ERR("failed to read path header\n");
             return InvalidParameter;
         }
-        if (path_header->magic != VERSION_MAGIC)
+        if (!VALID_MAGIC(path_header->magic))
         {
             ERR("invalid path header magic %#x\n", path_header->magic);
             return InvalidParameter;
@@ -1069,8 +1069,7 @@ GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *data, INT size, GpRe
     init_memory_buffer(&mbuf, data, size);
 
     region_header = buffer_read(&mbuf, sizeof(*region_header));
-    if (!region_header || (region_header->magic != VERSION_MAGIC &&
-                           region_header->magic != VERSION_MAGIC2))
+    if (!region_header || !VALID_MAGIC(region_header->magic))
         return InvalidParameter;
 
     status = GdipCreateRegion(region);




More information about the wine-cvs mailing list