Date: Wed, 4 Nov 1998 08:53:38 -0500 (EST) From: viro@math.psu.edu To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: bin/8573: [PATCH] SIGSEGV in nvi 1.79 Message-ID: <199811041353.IAA09242@hilbert.math.psu.edu>
next in thread | raw e-mail | index | archive | help
>Number: 8573 >Category: bin >Synopsis: nvi 1.79 SIGSEGVs on any address in .exrc >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Nov 4 06:00:01 PST 1998 >Last-Modified: >Originator: Al Viro >Organization: -ENOENT >Release: FreeBSD 2.2.7-RELEASE i386 >Environment: Any OS that doesn't like NULL dereferencing ;-/ Reproducable on 3.0, Linux, SunOS, Slowlaris... >Description: ex/ex.c::ex_badaddr(sp,ba,cp,nret) passes cp->name to ex_emsg() in case when sp->ep is NULL. It doesn't check for cp!=NULL. Bad, since in many places it is explicitly called in such setup. One of them (in ex/ex.c): 1834: /* No addresses permitted until a file has been read in. */ 1835: if (sp->ep == NULL && strchr("$0123456789'\\/?.+-^", *ecp->cp)) { 1836: ex_badaddr(sp, NULL, A_EMPTY, NUM_OK); ... which could as well be foo(*(char*)NULL)... >How-To-Repeat: Just put into .exrc any command with address. Plain .<whatever> will go. >Fix: *** ex/ex.c Thu Oct 10 18:49:46 1996 --- ex/ex.c.new Wed Nov 4 02:32:49 1998 *************** *** 2307,2313 **** * underlying file, that's the real problem. */ if (sp->ep == NULL) { ! ex_emsg(sp, cp->name, EXM_NOFILEYET); return; } --- 2307,2313 ---- * underlying file, that's the real problem. */ if (sp->ep == NULL) { ! ex_emsg(sp, cp ? cp->name : NULL, EXM_NOFILEYET); return; } >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811041353.IAA09242>