From 8349909f6048dca77186ce32a7759ed76ddbc322 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Wed, 26 Nov 2014 17:07:58 +0100 Subject: [PATCH] helpers.c:run_interactive() - Check arguments and return values better. Signed-off-by: Joachim Nilsson --- helpers.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/helpers.c b/helpers.c index a2b17dc6..1f0d3bb4 100644 --- a/helpers.c +++ b/helpers.c @@ -501,12 +501,19 @@ int run_interactive(char *cmd, char *fmt, ...) va_list ap; FILE *fp = tmpfile(); - va_start(ap, fmt); - vsnprintf(line, sizeof(line), fmt, ap); - va_end(ap); + if (!cmd) { + errno = EINVAL; + return 1; + } + + if (fmt) { + va_start(ap, fmt); + vsnprintf(line, sizeof(line), fmt, ap); + va_end(ap); - if (fmt) print_desc("", line); + } + if (fp && !debug) { oldout = dup(STDOUT_FILENO); olderr = dup(STDERR_FILENO); @@ -515,11 +522,15 @@ int run_interactive(char *cmd, char *fmt, ...) } status = run(cmd); if (fp && !debug) { - dup2(oldout, STDOUT_FILENO); - dup2(olderr, STDERR_FILENO); + if (oldout >= 0) + dup2(oldout, STDOUT_FILENO); + if (olderr >= 0) + dup2(olderr, STDERR_FILENO); } + if (fmt) print_result(status); + if (fp && !debug) { size_t len, written;