gdi.exe: Reset devmode->dmDriverExtra to avoid invalid memory accesses.

Dmitry Timoshkov dmitry at baikal.ru
Fri Nov 13 07:14:16 CST 2015


ChangeDisplaySettingsA/W already handle passed in DEVMODE this way.

For bug 19160.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/gdi.exe16/gdi.c    | 7 ++++---
 include/wine/wingdi16.h | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/dlls/gdi.exe16/gdi.c b/dlls/gdi.exe16/gdi.c
index 8ee37d7..bfdbf6d 100644
--- a/dlls/gdi.exe16/gdi.c
+++ b/dlls/gdi.exe16/gdi.c
@@ -1169,10 +1169,11 @@ HDC16 WINAPI CreateCompatibleDC16( HDC16 hdc )
 /***********************************************************************
  *           CreateDC    (GDI.53)
  */
-HDC16 WINAPI CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output,
-                         const DEVMODEA *initData )
+HDC16 WINAPI CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output, DEVMODEA *devmode )
 {
-    return HDC_16( CreateDCA( driver, device, output, initData ) );
+    if (devmode) devmode->dmDriverExtra = 0;
+
+    return HDC_16( CreateDCA( driver, device, output, devmode ) );
 }
 
 
diff --git a/include/wine/wingdi16.h b/include/wine/wingdi16.h
index c56c7b1..f763be6 100644
--- a/include/wine/wingdi16.h
+++ b/include/wine/wingdi16.h
@@ -377,7 +377,7 @@ HBITMAP16   WINAPI CreateBitmapIndirect16(const BITMAP16*);
 HBRUSH16    WINAPI CreateBrushIndirect16(const LOGBRUSH16*);
 HBITMAP16   WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16);
 HDC16       WINAPI CreateCompatibleDC16(HDC16);
-HDC16       WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HDC16       WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,DEVMODEA*);
 HBITMAP16   WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD,
                                     LPCVOID,const BITMAPINFO*,UINT16);
 HBRUSH16    WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16);
-- 
2.6.3




More information about the wine-patches mailing list