https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d9f8b8b0338a49449ae608...
commit d9f8b8b0338a49449ae608bf45f8943c2a8cfc84 Author: James Tabor james.tabor@reactos.org AuthorDate: Mon Sep 27 23:11:33 2021 -0500 Commit: James Tabor james.tabor@reactos.org CommitDate: Mon Sep 27 23:11:33 2021 -0500
[NtGDI] Fix leaking of bitmaps while testing INFO DC's.
Soon to be commit test for metafiles.
ret = MaskBlt(hdc, 0, 0, 3, 4, dib_hdc, 0, 0, mask_bitmap, 0, 0, SRCCOPY); --- win32ss/gdi/ntgdi/bitblt.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/win32ss/gdi/ntgdi/bitblt.c b/win32ss/gdi/ntgdi/bitblt.c index 1fca961e471..17172732a8c 100644 --- a/win32ss/gdi/ntgdi/bitblt.c +++ b/win32ss/gdi/ntgdi/bitblt.c @@ -385,6 +385,7 @@ NtGdiMaskBlt( if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { WARN("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiMaskBlt\n", hdcDest, hdcSrc); + if(psurfMask) SURFACE_ShareUnlockSurface(psurfMask); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -396,6 +397,7 @@ NtGdiMaskBlt( { if(DCSrc) DC_UnlockDc(DCSrc); WARN("Invalid destination dc handle (0x%p) passed to NtGdiMaskBlt\n", hdcDest); + if(psurfMask) SURFACE_ShareUnlockSurface(psurfMask); return FALSE; }
@@ -404,6 +406,7 @@ NtGdiMaskBlt( if(DCSrc) DC_UnlockDc(DCSrc); DC_UnlockDc(DCDest); /* Yes, Windows really returns TRUE in this case */ + if(psurfMask) SURFACE_ShareUnlockSurface(psurfMask); return TRUE; }
@@ -415,6 +418,7 @@ NtGdiMaskBlt( DC_UnlockDc(DCDest); DC_UnlockDc(DCSrc); /* Yes, Windows really returns TRUE in this case */ + if(psurfMask) SURFACE_ShareUnlockSurface(psurfMask); return TRUE; } }