From 32fb9b77db11ec82231e4cee45adf921ab9a332e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Sun, 3 Nov 2024 14:07:48 -0500
Subject: [PATCH] More malloc() return checks

---
 src/uifc/uifc32.c | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c
index 782f27fa3d..8b1b3601fe 100644
--- a/src/uifc/uifc32.c
+++ b/src/uifc/uifc32.c
@@ -461,28 +461,30 @@ void docopy(void)
 					case CIOLIB_BUTTON_1_DRAG_END:
 						lines=abs(mevent.endy-mevent.starty)+1;
 						copybuf=malloc(((endy-starty+1)*(endx-startx+1)+1+lines*2)*4);
-						outpos=0;
-						for(y=starty-1;y<endy;y++) {
-							for(x=startx-1;x<endx;x++) {
-								size_t outlen;
-								uint8_t *utf8str;
-								char ch;
-
-								ch = screen->vmem[(y*api->scrn_width+x)].ch ? screen->vmem[(y*api->scrn_width+x)].ch : ' ';
-								utf8str = cp_to_utf8(conio_fontdata[screen->vmem[(y*api->scrn_width+x)].font].cp, &ch, 1, &outlen);
-								if (utf8str == NULL)
-									continue;
-								memcpy(copybuf + outpos, utf8str, outlen);
-								outpos += outlen;
+						if (copybuf) {
+							outpos=0;
+							for(y=starty-1;y<endy;y++) {
+								for(x=startx-1;x<endx;x++) {
+									size_t outlen;
+									uint8_t *utf8str;
+									char ch;
+
+									ch = screen->vmem[(y*api->scrn_width+x)].ch ? screen->vmem[(y*api->scrn_width+x)].ch : ' ';
+									utf8str = cp_to_utf8(conio_fontdata[screen->vmem[(y*api->scrn_width+x)].font].cp, &ch, 1, &outlen);
+									if (utf8str == NULL)
+										continue;
+									memcpy(copybuf + outpos, utf8str, outlen);
+									outpos += outlen;
+								}
+								#ifdef _WIN32
+									copybuf[outpos++]='\r';
+								#endif
+								copybuf[outpos++]='\n';
 							}
-							#ifdef _WIN32
-								copybuf[outpos++]='\r';
-							#endif
-							copybuf[outpos++]='\n';
+							copybuf[outpos]=0;
+							copytext(copybuf, strlen(copybuf));
+							free(copybuf);
 						}
-						copybuf[outpos]=0;
-						copytext(copybuf, strlen(copybuf));
-						free(copybuf);
 						restorescreen(screen);
 						freescreen(screen);
 						freescreen(sbuffer);
-- 
GitLab