"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Tracey Emery <tracey@traceyemery.net>
Subject:
tog free fixes
To:
gameoftrees@openbsd.org
Date:
Fri, 7 Aug 2020 14:13:17 -0600

Download raw body.

Thread
A few missed frees in tog were noticed by cppcheck.

Ok?
-- 

Tracey Emery

diff 6d7260fd5af3b577d020bdbcb038b6c245216d5e /home/tracey/src/got
blob - be1e9bf1dfdb2efc4b2b139be32285d1519c4a3c
file + tog/tog.c
--- tog/tog.c
+++ tog/tog.c
@@ -3049,8 +3049,10 @@ get_filestream_info(size_t *filesize, int *nlines, off
 		return got_error_from_errno("calloc");
 
 	fread(buf, 1, len, infile);
-	if (ferror(infile))
+	if (ferror(infile)) {
+		free(buf);
 		return got_error_from_errno("fread");
+	}
 
 	i = 0;
 	if (line_offsets && nlines) {
@@ -3059,8 +3061,11 @@ get_filestream_info(size_t *filesize, int *nlines, off
 			noffsets = 1;
 			*nlines = 1;
 			*line_offsets = calloc(1, sizeof(**line_offsets));
-			if (*line_offsets == NULL)
+			if (*line_offsets == NULL) {
+				free(buf);
+				free(*line_offsets);
 				return got_error_from_errno("calloc");
+			}
 				/* Skip forward over end of first line. */
 			while (i < len) {
 				if (buf[i] == '\n')
@@ -3094,13 +3099,18 @@ get_filestream_info(size_t *filesize, int *nlines, off
 		}
 	}
 
-	if (fflush(infile) != 0)
+	if (fflush(infile) != 0) {
+		free(buf);
+		free(*line_offsets);
 		return got_error_from_errno("fflush");
+	}
 	rewind(infile);
 
 	if (filesize)
 		*filesize = len;
 
+	free(buf);
+	free(*line_offsets);
 	return NULL;
 }