svn commit: trunk/busybox/networking

vapier at busybox.net vapier at busybox.net
Sat Sep 24 23:48:20 UTC 2005


Author: vapier
Date: 2005-09-24 16:48:18 -0700 (Sat, 24 Sep 2005)
New Revision: 11636

Log:
touchup argc/argv handling to shrink a bit and fix a segfault when given wrong number of parameters as noted and fixed by Cristian Ionescu-Idbohrn

Modified:
   trunk/busybox/networking/ipcalc.c


Changeset:
Modified: trunk/busybox/networking/ipcalc.c
===================================================================
--- trunk/busybox/networking/ipcalc.c	2005-09-24 23:15:53 UTC (rev 11635)
+++ trunk/busybox/networking/ipcalc.c	2005-09-24 23:48:18 UTC (rev 11636)
@@ -100,18 +100,19 @@
 			"mbn"
 #endif
 			);
+
+	argc -= optind;
+	argv += optind;
 	if (mode & (BROADCAST | NETWORK | NETPREFIX)) {
-		if (argc - optind > 2) {
+		if (argc > 2 || argc <= 0)
 			bb_show_usage();
-		}
 	} else {
-		if (argc - optind != 1) {
+		if (argc != 1)
 			bb_show_usage();
-		}
 	}
 
 #ifdef CONFIG_FEATURE_IPCALC_FANCY
-	prefixstr = ipstr = argv[optind];
+	prefixstr = ipstr = argv[0];
 
 	while(*prefixstr) {
 		if (*prefixstr == '/') {
@@ -142,16 +143,16 @@
 	}
 	ipaddr = inet_aton(ipstr, &a);
 #else
-	ipaddr = inet_aton(argv[optind], &a);
+	ipaddr = inet_aton(argv[0], &a);
 #endif
 
 	if (ipaddr == 0) {
-		IPCALC_MSG(bb_error_msg_and_die("bad IP address: %s", argv[optind]),
+		IPCALC_MSG(bb_error_msg_and_die("bad IP address: %s", argv[0]),
 				exit(EXIT_FAILURE));
 	}
 	ipaddr = a.s_addr;
 
-	if (argc - optind == 2) {
+	if (argc == 2) {
 #ifdef CONFIG_FEATURE_IPCALC_FANCY
 		if (have_netmask) {
 			IPCALC_MSG(bb_error_msg_and_die("Both prefix and netmask were specified, use one or the other.\n"),
@@ -159,9 +160,9 @@
 		}
 
 #endif
-		netmask = inet_aton(argv[optind + 1], &a);
+		netmask = inet_aton(argv[1], &a);
 		if (netmask == 0) {
-			IPCALC_MSG(bb_error_msg_and_die("bad netmask: %s", argv[optind + 1]),
+			IPCALC_MSG(bb_error_msg_and_die("bad netmask: %s", argv[1]),
 					exit(EXIT_FAILURE));
 		}
 		netmask = a.s_addr;
@@ -200,7 +201,7 @@
 		hostinfo = gethostbyaddr((char *) &ipaddr, sizeof(ipaddr), AF_INET);
 		if (!hostinfo) {
 			IPCALC_MSG(bb_herror_msg_and_die(
-						"cannot find hostname for %s", argv[optind]),);
+						"cannot find hostname for %s", argv[0]),);
 			exit(EXIT_FAILURE);
 		}
 		for (x = 0; hostinfo->h_name[x]; x++) {




More information about the busybox-cvs mailing list