Commit cd6670bff328e7f2491c207747a2d49a9b20648a

Sylvain Becker 2020-10-02T10:48:27

SDL_Surface refcount: fix memory leak when blitting between stack'ed surfaces (see bug 5226)

diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c
index 5539465..3d505cc 100644
--- a/src/video/SDL_surface.c
+++ b/src/video/SDL_surface.c
@@ -1259,6 +1259,7 @@ int SDL_ConvertPixels(int width, int height,
     SDL_BlitMap src_blitmap, dst_blitmap;
     SDL_Rect rect;
     void *nonconst_src = (void *) src;
+    int ret;
 
     /* Check to make sure we are blitting somewhere, so we don't crash */
     if (!dst) {
@@ -1311,7 +1312,12 @@ int SDL_ConvertPixels(int width, int height,
     rect.y = 0;
     rect.w = width;
     rect.h = height;
-    return SDL_LowerBlit(&src_surface, &rect, &dst_surface, &rect);
+    ret = SDL_LowerBlit(&src_surface, &rect, &dst_surface, &rect);
+
+    /* Free blitmap reference, after blitting between stack'ed surfaces */
+    SDL_InvalidateMap(src_surface.map);
+
+    return ret;
 }
 
 /*