commit 51d43a6989b669160ce20771c44deb0ffae2b5aa
parent a75f4a1496e9a42347a859af14f9f627d4a54e9c
Author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Date: Mon, 17 Jul 2023 00:50:19 +0200
screen: don't leak memory and don't crash if failed to adjust for new screen size
Diffstat:
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/devices/screen.c b/src/devices/screen.c
@@ -83,14 +83,20 @@ void
screen_resize(Uint16 width, Uint16 height)
{
Uint8 *bg, *fg;
- Uint32 *pixels;
+ Uint32 *pixels = NULL;
if(width < 0x8 || height < 0x8 || width >= 0x400 || height >= 0x400)
return;
- bg = realloc(uxn_screen.bg, width * height),
- fg = realloc(uxn_screen.fg, width * height);
- pixels = realloc(uxn_screen.pixels, width * height * sizeof(Uint32));
- if(!bg || !fg || !pixels)
+ bg = malloc(width * height),
+ fg = malloc(width * height);
+ if(bg && fg)
+ pixels = realloc(uxn_screen.pixels, width * height * sizeof(Uint32));
+ if(!bg || !fg || !pixels) {
+ free(bg);
+ free(fg);
return;
+ }
+ free(uxn_screen.bg);
+ free(uxn_screen.fg);
uxn_screen.bg = bg;
uxn_screen.fg = fg;
uxn_screen.pixels = pixels;
diff --git a/src/uxnemu.c b/src/uxnemu.c
@@ -293,7 +293,7 @@ capture_screen(void)
return;
SDL_RenderReadPixels(emu_renderer, NULL, format, surface->pixels, surface->pitch);
strftime(fname, sizeof(fname), "screenshot-%Y%m%d-%H%M%S.bmp", localtime(&t));
- if(SDL_SaveBMP(surface, fname) == 0){
+ if(SDL_SaveBMP(surface, fname) == 0) {
fprintf(stderr, "Saved %s\n", fname);
fflush(stderr);
}