From 4e67f8747952c96b9008a015e8feafc5ad18b8d4 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 12 Jun 2026 10:53:10 +1000 Subject: [PATCH] scan-build: fix resource leaks on error paths clientserver.c: close the --early-input-file FILE* on the fstat/oversize/early-EOF error returns; it was only closed on the success path. getgroups.c: free the gid list before returning. --- clientserver.c | 4 ++++ getgroups.c | 1 + 2 files changed, 5 insertions(+) diff --git a/clientserver.c b/clientserver.c index cc59663a..dbde116c 100644 --- a/clientserver.c +++ b/clientserver.c @@ -270,11 +270,14 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char FILE *f = fopen(early_input_file, "rb"); if (!f || do_fstat(fileno(f), &st) < 0) { rsyserr(FERROR, errno, "failed to open %s", early_input_file); + if (f) + fclose(f); return -1; } early_input_len = st.st_size; if (early_input_len > (int)sizeof line) { rprintf(FERROR, "%s is > %d bytes.\n", early_input_file, (int)sizeof line); + fclose(f); return -1; } if (early_input_len > 0) { @@ -283,6 +286,7 @@ int start_inband_exchange(int f_in, int f_out, const char *user, int argc, char int len; if (feof(f)) { rprintf(FERROR, "Early EOF in %s\n", early_input_file); + fclose(f); return -1; } len = fread(line, 1, early_input_len, f); diff --git a/getgroups.c b/getgroups.c index 8a37ed0b..6b83d452 100644 --- a/getgroups.c +++ b/getgroups.c @@ -57,5 +57,6 @@ printf("%lu", (unsigned long)gid); printf("\n"); + free(list); return 0; }