diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-22 12:42:43 -0400 |
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2026-04-22 12:42:43 -0400 |
| commit | add80c7fbbe323c930538d5a5e1dd94d28274226 (patch) | |
| tree | 35f8086f4db89f9cd21976b3f7243199b0a0fbbb /src | |
| parent | 4ffe6d547416b416f1a15486c77dc30e433861ce (diff) | |
| download | stasis-add80c7fbbe323c930538d5a5e1dd94d28274226.tar.gz | |
shell: close file handles on error
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/core/system.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/lib/core/system.c b/src/lib/core/system.c index 6c18cc2..608994e 100644 --- a/src/lib/core/system.c +++ b/src/lib/core/system.c @@ -21,7 +21,12 @@ int shell(struct Process *proc, char *args) { FILE *tp = NULL; char *t_name = xmkstemp(&tp, "w"); - if (!t_name || !tp) { + if (!t_name) { + fclose(tp); + return -1; + } + if (!tp) { + guard_free(t_name); return -1; } @@ -37,6 +42,8 @@ int shell(struct Process *proc, char *args) { pid_t pid = fork(); if (pid == -1) { fprintf(stderr, "fork failed\n"); + guard_free(t_name); + fclose(tp); exit(1); } else if (pid == 0) { FILE *fp_out = NULL; @@ -55,6 +62,9 @@ int shell(struct Process *proc, char *args) { fp_err = freopen(proc->f_stderr, "w+", stderr); if (!fp_err) { fprintf(stderr, "Unable to redirect stderr to %s: %s\n", proc->f_stdout, strerror(errno)); + if (fp_out) { + fclose(fp_out); + } exit(1); } } |
