From 7c71d71894ca896e2718a24b51b39b0e5f9c27e6 Mon Sep 17 00:00:00 2001 From: Robert Mustacchi Date: Thu, 13 Sep 2018 22:00:11 +0000 Subject: 10216 xargs does not properly detect when -P is negative Reviewed by: Patrick Mooney Reviewed by: Jason King Reviewed by: Andy Fiddaman Reviewed by: Andy Stormont Reviewed by: Peter Tribble Approved by: Dan McDonald --- usr/src/cmd/xargs/xargs.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'usr/src/cmd') diff --git a/usr/src/cmd/xargs/xargs.c b/usr/src/cmd/xargs/xargs.c index 517c33c7e1..26feb9bdf6 100644 --- a/usr/src/cmd/xargs/xargs.c +++ b/usr/src/cmd/xargs/xargs.c @@ -21,7 +21,7 @@ /* * Copyright 2014 Garrett D'Amore * Copyright 2012 DEY Storage Systems, Inc. - * Copyright (c) 2017, Joyent, Inc. + * Copyright (c) 2018, Joyent, Inc. * * Portions of this file developed by DEY Storage Systems, Inc. are licensed * under the terms of the Common Development and Distribution License (CDDL) @@ -163,7 +163,7 @@ int main(int argc, char **argv) { int j; - unsigned long l; + long l; struct inserts *psave; int c; int initsize; @@ -316,13 +316,19 @@ main(int argc, char **argv) case 'P': /* -P maxprocs: # of child processses */ errno = 0; - l = strtoul(optarg, &eptr, 10); + l = strtol(optarg, &eptr, 10); if (*eptr != '\0' || errno != 0) { ermsg(_("failed to parse maxprocs (-P): %s\n"), optarg); break; } + if (l < 0) { + ermsg(_("maximum number of processes (-P) " + "cannot be negative\n")); + break; + } + /* * Come up with an upper bound that'll probably fit in * memory. -- cgit v1.2.3