Subject: Re: lib/30552: small bug in libedit might cause abnormal program termination
To: None <lib-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 06/21/2005 00:47:02
The following reply was made to PR lib/30552; it has been noted by GNATS.
From: christos@zoulas.com (Christos Zoulas)
To: gnats-bugs@netbsd.org, lib-bug-people@netbsd.org,
gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: bkoenig@cs.tu-berlin.de
Subject: Re: lib/30552: small bug in libedit might cause abnormal program termination
Date: Mon, 20 Jun 2005 20:46:03 -0400
On Jun 18, 10:05pm, bkoenig@cs.tu-berlin.de (bkoenig@cs.tu-berlin.de) wrote:
-- Subject: lib/30552: small bug in libedit might cause abnormal program term
| >Number: 30552
| >Category: lib
| >Synopsis: small bug in libedit might cause abnormal program termination
| >Confidential: no
| >Severity: non-critical
| >Priority: low
| >Responsible: lib-bug-people
| >State: open
| >Class: sw-bug
| >Submitter-Id: net
| >Arrival-Date: Sat Jun 18 22:05:00 +0000 2005
| >Originator: Björn König
| >Release:
| >Organization:
| >Environment:
| >Description:
| libedit covers several vi and emacs functions and stores
| descriptions about them in a structure called el_func_help
| which will be generated automatically. This structure is
| terminated by { NULL, 0, NULL } as customary to have an
| exit condition for use with loops. The problem is that
| the map_init function in lib/libedit/map.c do not respect
| this null-termination. It allocates memory for only N
| functions, but N+1 is necessary to include the termination.
| You'll get a segmentation fault in certain cases.
|
| >How-To-Repeat:
| I'm not sure if this works with NetBSD, at least it does with FreeBSD. Unfornately I have no NetBSD system available.
|
| Set a language explicitly if you don't have set any.
|
| > setenv LANG en_US.ISO8859-1
|
| Run a shell with built-in emacs command line editor.
|
| > sh -E
|
| List all editor commands.
|
| $ bind -l 2>/dev/null
| Segmentation fault (core dumped)
I don't think that is the case. EL_NUM_FCNS is one greater than
the total number of functions. The following does not core-dump...
christos
Index: map.c
===================================================================
RCS file: /cvsroot/src/lib/libedit/map.c,v
retrieving revision 1.20
diff -u -u -r1.20 map.c
--- map.c 13 Aug 2004 12:10:39 -0000 1.20
+++ map.c 21 Jun 2005 00:43:36 -0000
@@ -916,10 +916,18 @@
el->el_map.vii = el_map_vi_insert;
el->el_map.help = (el_bindings_t *) el_malloc(sizeof(el_bindings_t) *
EL_NUM_FCNS);
if (el->el_map.help == NULL)
return (-1);
+ (void) memset(el->el_map.help, 1, sizeof(el_bindings_t) * EL_NUM_FCNS);
(void) memcpy(el->el_map.help, help__get(),
sizeof(el_bindings_t) * EL_NUM_FCNS);
+ {
+ el_bindings_t *p = el->el_map.help;
+ for (;p->name;p++)
+ printf("%s\n", p->name);
+ printf("done\n");
+ }
+
el->el_map.func = (el_func_t *)el_malloc(sizeof(el_func_t) *
EL_NUM_FCNS);
if (el->el_map.func == NULL)