From 4bcf440bf28dbca10e3c07690f1c153728652f74 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Wed, 8 Mar 2023 18:02:36 +0100 Subject: Remove(3) f->tmpname from ctx_free Until now, f->tmpname was removed by move_file when the move operation succeeded. However, since a HTTP operation can fail before move_file is called, the temporary file must also be removed. --- http.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/http.c b/http.c index a06f29d..cbef2bc 100644 --- a/http.c +++ b/http.c @@ -225,21 +225,26 @@ static void ctx_free(struct ctx *const c) free(m->files); free(m->boundary); + if (m->fd >= 0 && close(m->fd)) + fprintf(stderr, "%s: close(2) m->fd: %s\n", + __func__, strerror(errno)); + for (size_t i = 0; i < m->nforms; i++) { struct form *const f = &m->forms[i]; free(f->name); free(f->filename); - free(f->tmpname); free(f->value); + + if (f->tmpname && remove(f->tmpname) && errno != ENOENT) + fprintf(stderr, "%s: remove(3) %s: %s\n", + __func__, f->tmpname, strerror(errno)); + + free(f->tmpname); } free(m->forms); - - if (m->fd >= 0 && close(m->fd)) - fprintf(stderr, "%s: close(2) m->fd: %s\n", - __func__, strerror(errno)); } free(c->field); -- cgit v1.2.3