ACK: [PATCH 2/6] pipeio: Fix error handling in fwts_pipe_exec
Alex Hung
alex.hung at canonical.com
Wed Apr 27 04:30:56 UTC 2016
On 2016-04-22 01:41 PM, Jeremy Kerr wrote:
> Currently, fwts_pipe_exec does not handle failures from fwts_pipe_read,
> and will end up dereferencing a NULL pointer on failure.
>
> This change implements error handling for this case.
>
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
> ---
> src/lib/src/fwts_pipeio.c | 17 +++++++++++------
> 1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/src/lib/src/fwts_pipeio.c b/src/lib/src/fwts_pipeio.c
> index 75addc5..7148903 100644
> --- a/src/lib/src/fwts_pipeio.c
> +++ b/src/lib/src/fwts_pipeio.c
> @@ -156,20 +156,25 @@ int fwts_pipe_close(const int fd, const pid_t pid)
> int fwts_pipe_exec(const char *command, fwts_list **list, int *status)
> {
> pid_t pid;
> - int fd;
> + int rc, fd;
> ssize_t len;
> char *text;
>
> if ((fd = fwts_pipe_open(command, &pid)) < 0)
> return FWTS_ERROR;
>
> - fwts_pipe_read(fd, &text, &len);
> - *list = fwts_list_from_text(text);
> - free(text);
> + rc = fwts_pipe_read(fd, &text, &len);
> + if (!rc && len > 0) {
> + *list = fwts_list_from_text(text);
> + free(text);
> + } else {
> + list = NULL;
> + }
>
> *status = fwts_pipe_close(fd, pid);
> - if (*status) {
> - fwts_list_free(*list, free);
> + if (rc || *status) {
> + if (*list)
> + fwts_list_free(*list, free);
> *list = NULL;
> return FWTS_EXEC_ERROR;
> }
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list