From ae7bf076dca5abb380ae1fb55d6895f75eed05f0 Mon Sep 17 00:00:00 2001 From: apio Date: Tue, 12 Dec 2023 23:27:05 +0100 Subject: [PATCH] fix: Avoid leaking all kinds of stuff in examples/pack Apart from potentionally leaking malloced memory on error, which isn't too bad since we immediately exit afterwards, we were leaving all opened files dangling, as fclose() was never called. --- examples/pack.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/pack.c b/examples/pack.c index c9863bd..9cc5257 100644 --- a/examples/pack.c +++ b/examples/pack.c @@ -47,6 +47,7 @@ int main(int argc, char** argv) if (!buf) { perror("malloc"); + fclose(fp); exit_status = 1; break; } @@ -54,8 +55,7 @@ int main(int argc, char** argv) if (ferror(fp)) { perror("fread"); - exit_status = 1; - break; + goto err; } struct stat st; @@ -63,8 +63,7 @@ int main(int argc, char** argv) if (rc < 0) { perror("fstat"); - exit_status = 1; - break; + goto err; } struct minitar_entry_metadata metadata; @@ -78,6 +77,7 @@ int main(int argc, char** argv) rc = minitar_write_file_entry(&mp, &metadata, buf); free(buf); + fclose(fp); if (rc != 0) { @@ -87,6 +87,13 @@ int main(int argc, char** argv) } arg++; + continue; + + err: + free(buf); + fclose(fp); + exit_status = 1; + break; } minitar_close_w(&mp); return exit_status;