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 +++++++++--- usr/src/man/man1/xargs.1 | 7 +++++-- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'usr/src') 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. diff --git a/usr/src/man/man1/xargs.1 b/usr/src/man/man1/xargs.1 index 2647192818..42e8ea4959 100644 --- a/usr/src/man/man1/xargs.1 +++ b/usr/src/man/man1/xargs.1 @@ -43,8 +43,9 @@ .\" Copyright 1989 AT&T .\" Copyright (c) 1992, X/Open Company Limited. All Rights Reserved. .\" Portions Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved. +.\" Copyright (c) 2018, Joyent, Inc. .\" -.TH XARGS 1 "May 28, 2017" +.TH XARGS 1 "September 13, 2018" .SH NAME xargs \- construct argument lists and invoke utility .SH SYNOPSIS @@ -211,7 +212,9 @@ otherwise, that particular invocation of \fIutility\fR is skipped. .ad .RS 15n Invokes \fIutility\fR using at most \fImaxprocs\fR (a positive decimal integer) -parallel child processes. +parallel child processes. If \fImaxprocs\fR is zero, then the system +will set a large upper bound to try and run as many processes as +possible. .RE .sp -- cgit v1.2.3