]> err.no Git - moreutils/commitdiff
parallel: Argument validation
authorTollef Fog Heen <tfheen@err.no>
Fri, 10 Jul 2009 12:09:48 +0000 (14:09 +0200)
committerTollef Fog Heen <tfheen@err.no>
Fri, 10 Jul 2009 12:09:48 +0000 (14:09 +0200)
Make sure the arguments passed to -j and -l are numbers and error out
if they are not.

parallel.c

index 597cda228c1635094fdd1136ac2079a0e47ff6b8..418dc348cd36b410129410d70f4d745fd8a89fad 100644 (file)
@@ -27,6 +27,7 @@
 #include <sys/time.h>
 #include <time.h>
 #include <stdlib.h>
+#include <errno.h>
 #include <sys/select.h>
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -91,6 +92,7 @@ int main(int argc, char **argv)
        int cidx = 0;
        int returncode = 0;
        int replace_cb = 0;
+       char *t;
 
        while ((opt = getopt(argc, argv, "+hij:l:")) != -1) {
                switch (opt) {
@@ -101,10 +103,22 @@ int main(int argc, char **argv)
                        replace_cb = 1;
                        break;
                case 'j':
-                       maxjobs = atoi(optarg);
+                       errno = 0;
+                       maxjobs = strtoul(optarg, &t, 0);
+                       if (errno != 0 || (t-optarg) != strlen(optarg)) {
+                               fprintf(stderr, "option '%s' is not a number\n",
+                                       optarg);
+                               exit(2);
+                       }
                        break;
                case 'l':
-                       maxload = atoi(optarg);
+                       errno = 0;
+                       maxload = strtoul(optarg, &t, 0);
+                       if (errno != 0 || (t-optarg) != strlen(optarg)) {
+                               fprintf(stderr, "option '%s' is not a number\n",
+                                       optarg);
+                               exit(2);
+                       }
                        break;
                default: /* ’?’ */
                        usage();