(main): Don't segfault when calculating the
authorJim Meyering <jim@meyering.net>
Mon, 21 Jun 2004 15:35:12 +0000 (15:35 +0000)
committerJim Meyering <jim@meyering.net>
Mon, 21 Jun 2004 15:35:12 +0000 (15:35 +0000)
expected number of operands for `mknod NAME'.

src/mknod.c

index 58f12f9..a3a9d22 100644 (file)
@@ -132,7 +132,12 @@ main (int argc, char **argv)
       newmode = mode_adjust (newmode, change);
     }
 
-  expected_operands = (argv[optind + 1][0] == 'p' ? 2 : 4);
+  /* If the number of arguments is 0 or 1,
+     or (if it's 2 or more and the second one starts with `p'), then there
+     must be exactly two operands.  Otherwise, there must be four.  */
+  expected_operands = (argc <= optind
+                      || (optind + 1 < argc && argv[optind + 1][0] == 'p')
+                      ? 2 : 4);
 
   if (argc - optind < expected_operands)
     {