[PATCH] gdi32/tests: Fix resource leak.

Nikolay Sivov bunglehead at gmail.com
Tue Jan 2 09:48:32 CST 2018


On 1/2/2018 6:43 PM, Andrey Gusev wrote:
> Signed-off-by: Andrey Gusev <andrey.goosev at gmail.com>
> ---
>  dlls/gdi32/tests/bitmap.c | 23 ++++++++++++++++++++++-
>  dlls/gdi32/tests/brush.c  |  7 +++++++
>  2 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
> index a4002c83b5..aa833e3a63 100644
> --- a/dlls/gdi32/tests/bitmap.c
> +++ b/dlls/gdi32/tests/bitmap.c
> @@ -143,8 +143,10 @@ static void test_createdibitmap(void)
>  
>      hbm = CreateDIBitmap(hdc, NULL, CBM_INIT, NULL, NULL, 0);
>      ok(hbm == NULL, "CreateDIBitmap should fail\n");
> +    DeleteObject(hbm);
>      hbm = CreateDIBitmap(hdc, NULL, 0, NULL, NULL, 0);
>      ok(hbm == NULL, "CreateDIBitmap should fail\n");
> +    DeleteObject(hbm);
>  
>      /* First create an un-initialised bitmap.  The depth of the bitmap
>         should match that of the hdc and not that supplied in bmih.
> @@ -472,11 +474,13 @@ static void test_dibsections(void)
>      bits = (BYTE*)0xdeadbeef;
>      hdib = CreateDIBSection(hdc, NULL, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
>      ok(hdib == NULL && bits == NULL, "CreateDIBSection failed for invalid parameter: bmi == 0x0\n");
> +    DeleteObject(hdib);
>  
>      hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
>      ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError());
>      ok(GetObjectW(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIBSection\n");
>      ok(dibsec.dsBm.bmBits == bits, "dibsec.dsBits %p != bits %p\n", dibsec.dsBm.bmBits, bits);
> +    DeleteObject(hdib);
>  
>      /* test the DIB memory */
>      ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info),
> @@ -492,7 +496,6 @@ static void test_dibsections(void)
>      test_dib_bits_access( hdib, bits );
>  
>      test_dib_info(hdib, bits, &pbmi->bmiHeader);
> -    DeleteObject(hdib);
>  
>      /* Test a top-down DIB. */
>      pbmi->bmiHeader.biHeight = -100;
> @@ -508,6 +511,7 @@ static void test_dibsections(void)
>      hdib = CreateDIBSection(hdc, pbmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
>      ok(hdib == NULL, "CreateDIBSection should fail when asked to create a compressed DIB section\n");
>      ok(GetLastError() == 0xdeadbeef, "wrong error %d\n", GetLastError());
> +    DeleteObject(hdib);
>  
>      pbmi->bmiHeader.biBitCount = 16;
>      pbmi->bmiHeader.biCompression = BI_BITFIELDS;
> @@ -1079,6 +1083,7 @@ static void test_dib_formats(void)
>  
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with null bitfields\n" );
> +    DeleteObject( hdib );
>      ret = SetDIBits(hdc, hbmp, 0, 1, data, bi, DIB_RGB_COLORS);
>      ok( !ret, "SetDIBits succeeded with null bitfields\n" );
>      /* other functions don't check */
> @@ -1107,6 +1112,7 @@ static void test_dib_formats(void)
>      *(DWORD *)&bi->bmiColors[2] = 7;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with null bitfields\n" );
> +    DeleteObject( hdib );
>      ret = SetDIBits(hdc, hbmp, 0, 1, data, bi, DIB_RGB_COLORS);
>      ok( !ret, "SetDIBits succeeded with null bitfields\n" );
>  
> @@ -1126,8 +1132,10 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with negative width\n" );
> +    DeleteObject( hdib );
>      hdib = CreateDIBitmap( hdc, &bi->bmiHeader, 0, bits, bi, DIB_RGB_COLORS );
>      ok( hdib == NULL, "CreateDIBitmap succeeded with negative width\n" );
> +    DeleteObject( hdib );
>      ret = SetDIBits(hdc, hbmp, 0, 1, data, bi, DIB_RGB_COLORS);
>      ok( !ret, "SetDIBits succeeded with negative width\n" );
>      ret = SetDIBitsToDevice( memdc, 0, 0, 1, 1, 0, 0, 0, 1, data, bi, DIB_RGB_COLORS );
> @@ -1149,6 +1157,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with zero width\n" );
> +    DeleteObject( hdib );
>      hdib = CreateDIBitmap( hdc, &bi->bmiHeader, 0, bits, bi, DIB_RGB_COLORS );
>      ok( hdib != NULL, "CreateDIBitmap failed with zero width\n" );
>      DeleteObject( hdib );
> @@ -1173,6 +1182,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with zero height\n" );
> +    DeleteObject( hdib );
>      hdib = CreateDIBitmap( hdc, &bi->bmiHeader, 0, bits, bi, DIB_RGB_COLORS );
>      ok( hdib != NULL, "CreateDIBitmap failed with zero height\n" );
>      DeleteObject( hdib );
> @@ -1199,6 +1209,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_PAL_COLORS+1, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with DIB_PAL_COLORS+1\n" );
> +    DeleteObject( hdib );
>      hdib = CreateDIBitmap( hdc, &bi->bmiHeader, 0, bits, bi, DIB_PAL_COLORS+1 );
>      ok( hdib != NULL, "CreateDIBitmap failed with DIB_PAL_COLORS+1\n" );
>      DeleteObject( hdib );
> @@ -1223,6 +1234,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_PAL_COLORS+2, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with DIB_PAL_COLORS+2\n" );
> +    DeleteObject( hdib );
>      hdib = CreateDIBitmap( hdc, &bi->bmiHeader, 0, bits, bi, DIB_PAL_COLORS+2 );
>      ok( hdib == NULL, "CreateDIBitmap succeeded with DIB_PAL_COLORS+2\n" );
>      DeleteObject( hdib );
> @@ -1255,6 +1267,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with size overflow\n" );
> +    DeleteObject( hdib );
>  
>      bi->bmiHeader.biWidth = 1;
>      bi->bmiHeader.biHeight = 0x40000001;
> @@ -1262,6 +1275,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with size overflow\n" );
> +    DeleteObject( hdib );
>  
>      bi->bmiHeader.biWidth = 2;
>      bi->bmiHeader.biHeight = 0x40000001;
> @@ -1269,6 +1283,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with size overflow\n" );
> +    DeleteObject( hdib );
>  
>      bi->bmiHeader.biWidth = 0x40000001;
>      bi->bmiHeader.biHeight = 1;
> @@ -1276,6 +1291,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with size overflow\n" );
> +    DeleteObject( hdib );
>  
>      bi->bmiHeader.biWidth = 0x40000001;
>      bi->bmiHeader.biHeight = 4;
> @@ -1283,6 +1299,7 @@ static void test_dib_formats(void)
>      bi->bmiHeader.biCompression = BI_RGB;
>      hdib = CreateDIBSection(hdc, bi, DIB_RGB_COLORS, &bits, NULL, 0);
>      ok( hdib == NULL, "CreateDIBSection succeeded with size overflow\n" );
> +    DeleteObject( hdib );
>  
>      DeleteDC( memdc );
>      DeleteObject( hbmp );
> @@ -2615,6 +2632,7 @@ static void test_GetDIBits_BI_BITFIELDS(void)
>      dibinfo->bmiHeader.biClrImportant = 0;
>      hbm = CreateDIBSection( hdc, dibinfo, DIB_RGB_COLORS, &ptr, NULL, 0 );
>      ok( hbm == 0, "creating 24-bpp BI_BITFIELDS dibsection should fail\n" );
> +    DeleteObject( hbm );
>      dibinfo->bmiHeader.biCompression = BI_RGB;
>      hbm = CreateDIBSection( hdc, dibinfo, DIB_RGB_COLORS, &ptr, NULL, 0 );
>      ok( hbm != 0, "failed to create bitmap\n" );
> @@ -2876,6 +2894,7 @@ static void test_bitmapinfoheadersize(void)
>  
>      hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0);
>      ok(hdib == NULL, "CreateDIBSection succeeded\n");
> +    DeleteObject(hdib);
>  
>      bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
>  
> @@ -2937,6 +2956,7 @@ static void test_bitmapinfoheadersize(void)
>  
>      hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0);
>      ok(hdib == NULL, "CreateDIBSection succeeded\n");
> +    DeleteObject(hdib);
>  
>      bci.bmciHeader.bcSize = sizeof(BITMAPCOREHEADER);
>  
> @@ -2949,6 +2969,7 @@ static void test_bitmapinfoheadersize(void)
>  
>      hdib = CreateDIBSection(hdc, (BITMAPINFO *)&bci, 0, NULL, NULL, 0);
>      ok(hdib == NULL, "CreateDIBSection succeeded\n");
> +    DeleteObject(hdib);
>  
>      bci.bmciHeader.bcSize = sizeof(BITMAPCOREINFO);
>  
> diff --git a/dlls/gdi32/tests/brush.c b/dlls/gdi32/tests/brush.c
> index 1a10429c05..ec5819f042 100644
> --- a/dlls/gdi32/tests/brush.c
> +++ b/dlls/gdi32/tests/brush.c
> @@ -237,36 +237,43 @@ static void test_pattern_brush(void)
>      DeleteObject( brush );
>      brush = CreateDIBPatternBrushPt( info, DIB_PAL_COLORS + 2 );
>      ok( !brush, "CreateDIBPatternBrushPt succeeded\n" );
> +    DeleteObject( brush );
>      brush = CreateDIBPatternBrushPt( info, DIB_PAL_COLORS + 3 );
>      ok( !brush, "CreateDIBPatternBrushPt succeeded\n" );
> +    DeleteObject( brush );
>  
>      info->bmiHeader.biBitCount = 8;
>      info->bmiHeader.biCompression = BI_RLE8;
>      brush = CreateDIBPatternBrushPt( info, DIB_RGB_COLORS );
>      ok( !brush, "CreateDIBPatternBrushPt succeeded\n" );
> +    DeleteObject( brush );
>  
>      info->bmiHeader.biBitCount = 4;
>      info->bmiHeader.biCompression = BI_RLE4;
>      brush = CreateDIBPatternBrushPt( info, DIB_RGB_COLORS );
>      ok( !brush, "CreateDIBPatternBrushPt succeeded\n" );
> +    DeleteObject( brush );
>  
>      br.lbStyle = BS_DIBPATTERN8X8;
>      br.lbColor = DIB_RGB_COLORS;
>      br.lbHatch = (ULONG_PTR)mem;
>      brush = CreateBrushIndirect( &br );
>      ok( !brush, "CreatePatternBrush succeeded\n" );
> +    DeleteObject( brush );
>  
>      br.lbStyle = BS_MONOPATTERN;
>      br.lbColor = DIB_RGB_COLORS;
>      br.lbHatch = (ULONG_PTR)mem;
>      brush = CreateBrushIndirect( &br );
>      ok( !brush, "CreatePatternBrush succeeded\n" );
> +    DeleteObject( brush );
>  
>      br.lbStyle = BS_INDEXED;
>      br.lbColor = DIB_RGB_COLORS;
>      br.lbHatch = (ULONG_PTR)mem;
>      brush = CreateBrushIndirect( &br );
>      ok( !brush, "CreatePatternBrush succeeded\n" );
> +    DeleteObject( brush );
>  
>      GlobalFree( mem );
>  }
> 
How did you verify if this fixes any leaks? It looks to me that you're
releasing NULL handles most of the time.



More information about the wine-devel mailing list