From: Tracey Emery Subject: tog free fixes To: gameoftrees@openbsd.org Date: Fri, 7 Aug 2020 14:13:17 -0600 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; }