From ru@ucb.crimea.ua Fri May 21 12:20:47 1999
Return-Path: <ru@ucb.crimea.ua>
Received: from relay.ucb.crimea.ua (relay.ucb.crimea.ua [212.110.138.1])
	by hub.freebsd.org (Postfix) with ESMTP id 3553A1502C
	for <FreeBSD-gnats-submit@freebsd.org>; Fri, 21 May 1999 12:19:55 -0700 (PDT)
	(envelope-from ru@ucb.crimea.ua)
Received: (from ru@localhost)
	by relay.ucb.crimea.ua (8.9.3/8.9.3/UCB) id WAA80152;
	Fri, 21 May 1999 22:19:44 +0300 (EEST)
	(envelope-from ru)
Message-Id: <199905211919.WAA80152@relay.ucb.crimea.ua>
Date: Fri, 21 May 1999 22:19:44 +0300 (EEST)
From: Ruslan Ermilov <ru@ucb.crimea.ua>
Reply-To: ru@ucb.crimea.ua
To: FreeBSD-gnats-submit@freebsd.org
Subject: [PATCH] /sbin/route cleanup
X-Send-Pr-Version: 3.2

>Number:         11823
>Category:       bin
>Synopsis:       [PATCH] /sbin/route cleanup
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    ru
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri May 21 12:30:01 PDT 1999
>Closed-Date:    Tue Jun 1 08:58:55 PDT 1999
>Last-Modified:  Tue Jun  1 09:02:21 PDT 1999
>Originator:     Ruslan Ermilov
>Release:        FreeBSD 3.2-STABLE i386
>Organization:
United Commercial Bank
>Environment:

3.2-STABLE
4.0-CURRENT

>Description:

/sbin/route doesn't check its syntax

>How-To-Repeat:

# route change default -gateway
Segmentation fault - core dumped

>Fix:
	
Index: route.c
===================================================================
RCS file: /usr/FreeBSD-CVS/src/sbin/route/route.c,v
retrieving revision 1.29
diff -u -r1.29 route.c
--- route.c	1998/07/28 06:25:35	1.29
+++ route.c	1999/05/21 19:12:05
@@ -582,28 +582,46 @@
 				break;
 			case K_IFA:
 				argc--;
-				(void) getaddr(RTA_IFA, *++argv, 0);
+				if (argc)
+					(void) getaddr(RTA_IFA, *++argv, 0);
+				else
+					usage((char *)NULL);
 				break;
 			case K_IFP:
 				argc--;
-				(void) getaddr(RTA_IFP, *++argv, 0);
+				if (argc)
+					(void) getaddr(RTA_IFP, *++argv, 0);
+				else
+					usage((char *)NULL);
 				break;
 			case K_GENMASK:
 				argc--;
-				(void) getaddr(RTA_GENMASK, *++argv, 0);
+				if (argc)
+					(void) getaddr(RTA_GENMASK, *++argv, 0);
+				else
+					usage((char *)NULL);
 				break;
 			case K_GATEWAY:
 				argc--;
-				(void) getaddr(RTA_GATEWAY, *++argv, 0);
+				if (argc)
+					(void) getaddr(RTA_GATEWAY, *++argv, 0);
+				else
+					usage((char *)NULL);
 				break;
 			case K_DST:
 				argc--;
-				ishost = getaddr(RTA_DST, *++argv, &hp);
-				dest = *argv;
+				if (argc) {
+					ishost = getaddr(RTA_DST, *++argv, &hp);
+					dest = *argv;
+				} else
+					usage((char *)NULL);
 				break;
 			case K_NETMASK:
 				argc--;
-				(void) getaddr(RTA_NETMASK, *++argv, 0);
+				if (argc)
+					(void) getaddr(RTA_NETMASK, *++argv, 0);
+				else
+					usage((char *)NULL);
 				/* FALLTHROUGH */
 			case K_NET:
 				forcenet++;
@@ -617,7 +635,10 @@
 			case K_RTT:
 			case K_RTTVAR:
 				argc--;
-				set_metric(*++argv, key);
+				if (argc)
+					set_metric(*++argv, key);
+				else
+					usage((char *)NULL);
 				break;
 			default:
 				usage(1+*argv);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->ru 
Responsible-Changed-By: ru 
Responsible-Changed-When: Sun May 30 22:04:00 PDT 1999 
Responsible-Changed-Why:  
My PR 
State-Changed-From-To: open->closed 
State-Changed-By: ru 
State-Changed-When: Tue Jun 1 08:58:55 PDT 1999 
State-Changed-Why:  
Fixed in -current and -stable. 
>Unformatted:
