https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d9f8b8b0338a49449ae60…
commit d9f8b8b0338a49449ae608bf45f8943c2a8cfc84
Author:     James Tabor <james.tabor(a)reactos.org>
AuthorDate: Mon Sep 27 23:11:33 2021 -0500
Commit:     James Tabor <james.tabor(a)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;
         }
     }