Subject: bin/16565: asa(1) segfaults when it cannot open a specified file
To: None <>
From: None <>
List: netbsd-bugs
Date: 04/29/2002 20:36:53
>Number:         16565
>Category:       bin
>Synopsis:       asa(1) segfaults when it cannot open a specified file
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 29 17:37:00 PDT 2002
>Originator:     Ryan Younce
>Release:        NetBSD 1.5ZC
NetBSD jay 1.5ZC NetBSD 1.5ZC (JAY) #0: Mon Apr 29 13:02:29 EDT 2002     root@jay:/root/kernel/compile/JAY i386
	asa(1) accepts a list of filenames (or none for stdin operation).
	If asa cannot open a specified file, it issues a diagnostic.
	However, if asa cannot open the file specified by the _last_ filename
	on the command line (whatever the reason; that is, the fopen() fails
	on that file), it additionally segfaults.

	It is a problem with the argv loop logic in main().

	This problem only occurs when a file which cannot be opened is at
	the end of the command line.
	asa a_bogus_file
	asa valid_file another_valid_file a_bogus_file
This is a working patch for /usr/src/usr.bin/asa/asa.c which corrects asa's
main() argv-processing loop.

(BTW, as a side note, there is some whitespace variation in main() (spaces
instead of tabs).  It's mostly restricted to the do-while loop.  The committer
may want to clean this up if/when the patch gets committed, as the following
patch does not clean it up).

--- asa.c.orig	Tue Apr 30 01:22:26 2002
+++ asa.c	Tue Apr 30 01:30:40 2002
@@ -57,13 +57,15 @@
                 if (*argv) {
                         if (!(fp = fopen(*argv, "r"))) {
 				warn ("%s", *argv);
+				++argv;
+			++argv;
                 asa (fp);
                 if (fp != stdin)
-        } while (*argv++);
+        } while (*argv);
 	exit (0);