https://git.reactos.org/?p=reactos.git;a=commitdiff;h=633d2e6d0cd4938dc6227c22f30cc2fd81c673aa

commit 633d2e6d0cd4938dc6227c22f30cc2fd81c673aa
Author:     Marek Benc <benc.marek.elektr...@proton.me>
AuthorDate: Sat Aug 31 22:07:33 2024 +0200
Commit:     GitHub <nore...@github.com>
CommitDate: Sat Aug 31 15:07:33 2024 -0500

    [NTUSER] Address memory leak in co_WinPosSetWindowPos(). (#7284)
    
    CORE-19723
---
 win32ss/user/ntuser/winpos.c | 37 +++++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/win32ss/user/ntuser/winpos.c b/win32ss/user/ntuser/winpos.c
index 7256f59ad56..d06730112be 100644
--- a/win32ss/user/ntuser/winpos.c
+++ b/win32ss/user/ntuser/winpos.c
@@ -2071,11 +2071,6 @@ co_WinPosSetWindowPos(
             RgnType = IntGdiCombineRgn(CopyRgn, VisAfter, VisBeforeJustClient, 
RGN_AND);
          }
 
-         if (VisBeforeJustClient != NULL)
-         {
-             REGION_Delete(VisBeforeJustClient);
-         }
-
          /* Now use in copying bits which are in the update region. */
          if (Window->hrgnUpdate != NULL)
          {
@@ -2223,11 +2218,6 @@ co_WinPosSetWindowPos(
          }
       }
 
-      if (CopyRgn != NULL)
-      {
-         REGION_Delete(CopyRgn);
-      }
-
       /* Expose what was covered before but not covered anymore */
       if (VisBefore != NULL)
       {
@@ -2248,12 +2238,6 @@ co_WinPosSetWindowPos(
              }
              REGION_Delete(ExposedRgn);
          }
-         REGION_Delete(VisBefore);
-      }
-
-      if (VisAfter != NULL)
-      {
-         REGION_Delete(VisAfter);
       }
    }
 
@@ -2301,6 +2285,27 @@ co_WinPosSetWindowPos(
       WinPos.flags |= SWP_NOZORDER|SWP_NOREDRAW;
    }
 
+   if (VisBefore != NULL)
+   {
+      REGION_Delete(VisBefore);
+      VisBefore = NULL;
+   }
+   if (VisBeforeJustClient != NULL)
+   {
+      REGION_Delete(VisBeforeJustClient);
+      VisBeforeJustClient = NULL;
+   }
+   if (VisAfter != NULL)
+   {
+      REGION_Delete(VisAfter);
+      VisAfter = NULL;
+   }
+   if (CopyRgn != NULL)
+   {
+      REGION_Delete(CopyRgn);
+      CopyRgn = NULL;
+   }
+
    if(!(flags & SWP_DEFERERASE))
    {
        /* erase parent when hiding or resizing child */

Reply via email to