Jacek Caban : gdi32: Allocate extra DWORD for EMR_CREATEDIBPATTERNBRUSHPT records.

Alexandre Julliard julliard at winehq.org
Tue Sep 7 16:25:19 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep  7 14:09:53 2021 +0200

gdi32: Allocate extra DWORD for EMR_CREATEDIBPATTERNBRUSHPT records.

Like for EMR_CREATEMONOBRUSH.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/emfdc.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/dlls/gdi32/emfdc.c b/dlls/gdi32/emfdc.c
index 479e0caa6b6..6dc7229b574 100644
--- a/dlls/gdi32/emfdc.c
+++ b/dlls/gdi32/emfdc.c
@@ -197,9 +197,16 @@ static DWORD emfdc_create_brush( struct emf *emf, HBRUSH brush )
             info_size = get_dib_info_size( info, usage );
 
             emr = HeapAlloc( GetProcessHeap(), 0,
-                             sizeof(EMRCREATEDIBPATTERNBRUSHPT)+info_size+info->bmiHeader.biSizeImage );
+                             sizeof(EMRCREATEDIBPATTERNBRUSHPT) + sizeof(DWORD) +
+                             info_size+info->bmiHeader.biSizeImage );
             if(!emr) break;
 
+            /* FIXME: There is an extra DWORD written by native before the BMI.
+             *        Not sure what it's meant to contain.
+             */
+            emr->offBmi = sizeof( EMRCREATEDIBPATTERNBRUSHPT ) + sizeof(DWORD);
+            *(DWORD *)(emr + 1) = 0x20000000;
+
             if (logbrush.lbStyle == BS_PATTERN && info->bmiHeader.biBitCount == 1)
             {
                 /* Presumably to reduce the size of the written EMF, MS supports an
@@ -211,16 +218,11 @@ static DWORD emfdc_create_brush( struct emf *emf, HBRUSH brush )
                  */
                 emr->emr.iType = EMR_CREATEMONOBRUSH;
                 usage = DIB_PAL_MONO;
-                /* FIXME: There is an extra DWORD written by native before the BMI.
-                 *        Not sure what it's meant to contain.
-                 */
-                emr->offBmi = sizeof( EMRCREATEDIBPATTERNBRUSHPT ) + sizeof(DWORD);
                 emr->cbBmi = sizeof( BITMAPINFOHEADER );
             }
             else
             {
                 emr->emr.iType = EMR_CREATEDIBPATTERNBRUSHPT;
-                emr->offBmi = sizeof( EMRCREATEDIBPATTERNBRUSHPT );
                 emr->cbBmi = info_size;
             }
             emr->ihBrush = index = emfdc_add_handle( emf, brush );




More information about the wine-cvs mailing list