From a3c50ff440fe087c8a994952ea0b3d24bb301442 Mon Sep 17 00:00:00 2001 From: Austin English Date: Mon, 8 Sep 2008 15:02:30 -0500 Subject: [PATCH] gdi32: Don't crash when copying to an EMF from a NULL bitmap --- dlls/gdi32/enhmfdrv/bitblt.c | 9 +++++++-- dlls/gdi32/tests/metafile.c | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/bitblt.c b/dlls/gdi32/enhmfdrv/bitblt.c index 0458ac1..ea7e465 100644 --- a/dlls/gdi32/enhmfdrv/bitblt.c +++ b/dlls/gdi32/enhmfdrv/bitblt.c @@ -81,9 +81,14 @@ static BOOL EMFDRV_BitBlockTransfer( BITMAP BM; WORD nBPP; LPBITMAPINFOHEADER lpBmiH; - EMFDRV_PDEVICE* physDevSrc = (EMFDRV_PDEVICE*)devSrc; - HBITMAP hBitmap = GetCurrentObject(physDevSrc->hdc, OBJ_BITMAP); + EMFDRV_PDEVICE* physDevSrc; + HBITMAP hBitmap; + physDevSrc = (EMFDRV_PDEVICE*)devSrc; + if (!devSrc) + return TRUE; + + hBitmap = GetCurrentObject(physDevSrc->hdc, OBJ_BITMAP); if (emrType == EMR_BITBLT) emrSize = sizeof(EMRBITBLT); else if (emrType == EMR_STRETCHBLT) diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c index 5f295bb..f70c40b 100644 --- a/dlls/gdi32/tests/metafile.c +++ b/dlls/gdi32/tests/metafile.c @@ -2150,6 +2150,31 @@ static void test_SetEnhMetaFileBits(void) /* XP doesn't set error in this case */ } +static void test_emf_copy(void) +{ + HDC hdc; + HDC hemfdc; + BOOL r; + HENHMETAFILE hemf; + + hdc = GetDC(NULL); + ok( hdc != NULL, "create dc failed\n"); + + hemfdc = CreateEnhMetaFile( hdc, NULL, NULL, NULL ); + ok( hemfdc != NULL, "create emf failed\n"); + + r = BitBlt( 0, 0, 0, 100, 100, hemfdc, 0, 0, 0xff0062); + ok( r == FALSE, "bitblt failed\n"); + + r = BitBlt( hemfdc, 0, 0, 100, 100, 0, 0, 0, 0xff0062); + ok( r == TRUE, "bitblt failed\n"); + + hemf = CloseEnhMetaFile(hemfdc); + ok( hemf != NULL, "failed to get ehmmetafile handle\n"); + + DeleteObject(hemf); +} + START_TEST(metafile) { init_function_pointers(); @@ -2174,4 +2199,5 @@ START_TEST(metafile) test_gdiis(); test_SetEnhMetaFileBits(); + test_emf_copy(); } -- 1.5.3.6