Subject: Re: lib/33841: getopt_long results in core dump
To: None <gnats-bugs@NetBSD.org, lib-bug-people@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 06/28/2006 09:08:45
On Jun 27, 9:30pm, cheusov@tut.by (cheusov@tut.by) wrote:
-- Subject: lib/33841: getopt_long results in core dump
| >Number: 33841
| >Category: lib
| >Synopsis: getopt_long is buggy and results in core dump
| >Confidential: no
| >Severity: serious
| >Priority: high
| >Responsible: lib-bug-people
| >State: open
| >Class: sw-bug
| >Submitter-Id: net
| >Arrival-Date: Tue Jun 27 21:30:00 +0000 2006
| >Originator: cheusov@tut.by
| >Release: NetBSD 3.0_STABLE
| >Organization:
| Best regards, Aleksey Cheusov.
| >Environment:
| System: NetBSD chen.chizhovka.net 3.0_STABLE NetBSD 3.0_STABLE (GENERIC) #2: Sun Mar 12 12:49:58 GMT 2006 cheusov@chen:/usr/src/sys/arch/i386/compile/GENERIC i386
| Architecture: i386
| Machine: i386
| >Description:
| See How-To-Repeat section
| >How-To-Repeat:
| 0 #cat main.c
| #include <getopt.h>
| #include <stdio.h>
|
| int main (int argc, char **argv)
| {
| int c;
|
| struct option longopts [] = {
| {"foo", no_argument, 0, 'f'},
| };
|
| c = getopt_long (argc, argv, "f", longopts, NULL);
| printf ("c=%d\n", c);
|
| return 0;
| }
| 0 #g++ -o main main.c
| 0 #./main -f
| c=102
| 0 #./main --foo
| c=102
| 0 #./main -b
| main: unknown option -- b
| c=63
| 0 #./main --bar
| Segmentation fault (core dumped)
| 139 #
|
Your longopts array does not terminate in an empty element as it is
supposed to.
christos