Date: Tue, 28 Dec 1999 16:26:00 +0500 (YEKT) From: serg@dor.zaural.ru To: FreeBSD-gnats-submit@freebsd.org Subject: ports/15741: joe editor coredumps when read a file using ^K-R Message-ID: <199912281126.QAA20429@dor.zaural.ru>
next in thread | raw e-mail | index | archive | help
>Number: 15741 >Category: ports >Synopsis: joe editor coredumps when read a file using ^K-R >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Dec 28 03:30:00 PST 1999 >Closed-Date: >Last-Modified: >Originator: Sergey N. Voronkov >Release: FreeBSD 3.4-STABLE i386 >Organization: Dorojnik, Kurgan >Environment: Any. Code bug. >Description: Joe dump core file when read a file using ^K-R. Problem is NULL-pointer assigment in b.c, patched line with b->filehandle (b is uninitialized). >How-To-Repeat: Open any file and try to insert another one into it. >Fix: Change patch-ad to this: --- b.c.orig Fri Jan 20 13:38:25 1995 +++ b.c Tue Dec 28 15:56:10 1999 @@ -22,4 +22,7 @@ #endif #include <errno.h> +#include <sys/file.h> +#include <sys/types.h> +#include <sys/stat.h> #include "config.h" @@ -202,4 +205,5 @@ else b->o=pdefault; mset(b->marks,0,sizeof(b->marks)); + b->filehandle = -1; /* initialize filehandle &&& ob */ b->rdonly=0; b->orphan=0; @@ -256,4 +260,8 @@ if(b && !--b->count) { + if (b->filehandle != -1) { + /* close filehandle, free lock &&& ob */ + close (b->filehandle); + } if(b->changed) abrerr(b->name); if(b==errbuf) errbuf=0; @@ -1672,5 +1680,6 @@ long skip,amnt; char *n; - int nowrite=0; + struct stat sb; + int nowrite=0,fh=-1; if(!s || !s[0]) @@ -1705,4 +1714,26 @@ fi=fopen(n,"r"); if(!fi) nowrite=0; +/*printf ("nowrite open=%i\n", nowrite); */ + + /* check file mod, if no write flags set, + joe in read only mode. &&& ob */ + + if (!nowrite) { + nowrite = (!stat (n, &sb)) && (!(sb.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH))); + } +/*printf ("nowrite stat=%i\n", nowrite); */ + + /* lock the file if writable, or go into read only mode if + already locked, */ + + if ((fi) && (!nowrite)) { + fh = dup( fileno(fi) ); + nowrite = (flock (fh, LOCK_EX | LOCK_NB)); + } +/*printf ("nowrite flock=%i\n", nowrite); */ + +/*nowrite = 1; */ /* for test purpose */ +/*printf ("nowrite=%i\n", nowrite); */ + } joesep(n); @@ -1762,4 +1793,5 @@ b->er=error; + if( fh != -1 ) b->filehandle = fh; return b; } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199912281126.QAA20429>