[pacman-dev] [PATCH] die if '-' is given with empty stdin

Andrew Gregory andrew.gregory.8 at gmail.com
Sun Jun 2 23:45:05 EDT 2013


Several operations default to all packages/repos/etc if no targets are
provided.  If a user provides '-' they almost certainly expect there to
be targets on stdin and will be surprised if pacman falls back to the
default because there are none.

Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
 src/pacman/pacman.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 921331c..7aa0271 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -826,6 +826,7 @@ int main(int argc, char *argv[])
 	/* we support reading targets from stdin if a cmdline parameter is '-' */
 	if(alpm_list_find_str(pm_targets, "-")) {
 		if(!isatty(fileno(stdin))) {
+			int target_found = 0;
 			size_t current_size = PATH_MAX;
 			char *vdata, *line = malloc(current_size);
 
@@ -840,6 +841,7 @@ int main(int argc, char *argv[])
 					if(i > 0) {
 						line[i] = '\0';
 						pm_targets = alpm_list_add(pm_targets, strdup(line));
+						target_found = 1;
 						i = 0;
 					}
 				} else {
@@ -869,12 +871,18 @@ int main(int argc, char *argv[])
 			if(i > 0) {
 				line[i] = '\0';
 				pm_targets = alpm_list_add(pm_targets, strdup(line));
+				target_found = 1;
 			}
 			free(line);
 			if(!freopen(ctermid(NULL), "r", stdin)) {
 				pm_printf(ALPM_LOG_ERROR, _("failed to reopen stdin for reading: (%s)\n"),
 						strerror(errno));
 			}
+
+			if(!target_found) {
+				pm_printf(ALPM_LOG_ERROR, _("argument '-' specified with empty stdin\n"));
+				cleanup(1);
+			}
 		} else {
 			/* do not read stdin from terminal */
 			pm_printf(ALPM_LOG_ERROR, _("argument '-' specified without input on stdin\n"));
-- 
1.8.3



More information about the pacman-dev mailing list