diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-03-08 18:02:36 +0100 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-03-08 18:17:32 +0100 |
| commit | e37a0248e865db2d69c89d5c7bd8651dae255cab (patch) | |
| tree | c5b2485c885aa55b527921bc0cda2de3dbe90d03 | |
| parent | 6cbab96869cbee4c7d6fed95d30221903c616aa5 (diff) | |
| download | slcl-e37a0248e865db2d69c89d5c7bd8651dae255cab.tar.gz | |
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.
| -rw-r--r-- | http.c | 15 | ||||
| -rw-r--r-- | main.c | 5 |
2 files changed, 10 insertions, 10 deletions
@@ -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); @@ -638,11 +638,6 @@ end: fprintf(stderr, "%s: fclose(3): %s\n", __func__, strerror(errno)); ret = -1; } - else if (remove(old)) - { - fprintf(stderr, "%s: remove(3): %s\n", __func__, strerror(errno)); - ret = -1; - } return ret; } |
