From 3e483de4bc6db74910478161dc20ea09f62a0ed4 Mon Sep 17 00:00:00 2001 From: sit-d <281093367+sit-d@users.noreply.github.com> Date: Sun, 5 Jul 2026 19:20:28 -0600 Subject: [PATCH] fix: clean up DIB allocation failures --- iterator_gdi.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/iterator_gdi.c b/iterator_gdi.c index d839ea1..3286da2 100644 --- a/iterator_gdi.c +++ b/iterator_gdi.c @@ -503,6 +503,7 @@ static int dib_resize(Dib *d, int w, int h) DeleteDC(d->dc); d->dc = NULL; } + d->old_bmp = NULL; if (d->bmp) { DeleteObject(d->bmp); d->bmp = NULL; @@ -522,11 +523,25 @@ static int dib_resize(Dib *d, int w, int h) screen = GetDC(NULL); d->bmp = CreateDIBSection(screen, &bi, DIB_RGB_COLORS, (void **)&d->bits, NULL, 0); ReleaseDC(NULL, screen); - if (!d->bmp || !d->bits) + if (!d->bmp || !d->bits) { + if (d->bmp) { + DeleteObject(d->bmp); + d->bmp = NULL; + } + d->bits = NULL; + d->w = 0; + d->h = 0; return 0; + } d->dc = CreateCompatibleDC(NULL); - if (!d->dc) + if (!d->dc) { + DeleteObject(d->bmp); + d->bmp = NULL; + d->bits = NULL; + d->w = 0; + d->h = 0; return 0; + } d->old_bmp = SelectObject(d->dc, d->bmp); return 1; }