Bug 15741

Summary: joe editor coredumps when read a file using ^K-R
Product: Ports & Packages Reporter: Sergey N. Voronkov <serg>
Component: Individual Port(s)Assignee: Steve Price <steve>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Latest   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description Sergey N. Voronkov 1999-12-28 11:30:00 UTC
	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).

Fix: Change patch-ad to this:
How-To-Repeat: 
	Open any file and try to insert another one into it.
Comment 1 Will Andrews 1999-12-28 16:33:43 UTC
On 28-Dec-99 serg@dor.zaural.ru wrote:
> 
>>Number:         15741
>>Category:       ports
>>Synopsis:       joe editor coredumps when read a file using ^K-R

Please send this kind of thing to me before sending it to GNATS, so you can get
a "Reviewed By:" stamp from me BEFORE sending it in.. I am the maintainer for 
this port after all.. ;)

>>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

I used these machines:

[ 3.4-STABLE as of December 28 ]
FreeBSD shadow.blackdawn.com 3.4-STABLE FreeBSD 3.4-STABLE #0: Tue Dec 28
10:44:21 EST 1999     root@shadow.blackdawn.com:/usr/src/sys/compile/SHADOW 
i386

[ 4.0-CURRENT as of September 29 ]
FreeBSD argon.blackdawn.com 4.0-CURRENT FreeBSD 4.0-CURRENT #0: Tue Nov 30
10:14:31 EST 1999     root@argon.blackdawn.com:/usr/src/sys/compile/ARGON  i386

>       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).

Interesting.. I get the same problem using joe v2.8 (port Makefile v1.6)..:

Name of file to insert (^C to abort): prdesczsh: segmentation fault (core
dumped)  joe

Have you reported this to the joe author?

>       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;
>   }

Thanks for your work on this! Unfortunately, however, it did not work on my
-CURRENT machine. But I suspect it may be because the -CURRENT machine is still
a very old version due to problems with if_ep. Thus the compiler is very out of
date now (gcc 2.91.66, although this compile worked fine with gcc 2.7.2.3 on
the -STABLE machine). In addition, who knows what changes might have been
committed since the date indicated above; maybe the error below is obsolete.

Could someone with a newer version of -CURRENT test it on their machine? I get
errors like this:

<1 5019-0> (99-12-28 11:26:50) [root@argon /usr/ports/editors/joe]# make
===>  Extracting for joe-2.8
>> Checksum OK for joe2.8.tar.Z.
===>  Patching for joe-2.8
===>  Applying FreeBSD patches for joe-2.8
===>  Configuring for joe-2.8
===>  Building for joe-2.8
cc conf.c -o conf
./conf /usr/local/lib 0
cc -O -pipe -c b.c
b.c: In function `bmkchn':
b.c:207: structure has no member named `filehandle'
b.c: In function `brm':
b.c:262: structure has no member named `filehandle'
b.c:264: structure has no member named `filehandle'
b.c: In function `bload':
b.c:1795: structure has no member named `filehandle'
*** Error code 1

Stop in /usr/ports/editors/joe/work/joe.
*** Error code 1

Stop in /usr/ports/editors/joe.
*** Error code 1

Stop in /usr/ports/editors/joe.
*** Error code 1

Stop in /usr/ports/editors/joe.

(kinda looks like the structures in the std includes have been changed here.) I
won't comment on whether the patch is ready to be committed, since it doesn't
work on my -CURRENT machine, and I won't say it ISN'T ok, since my -CURRENT
machine is out of date.

Thanks for the patch, again. Fixes it on the latest -STABLE.

--
Will Andrews <andrews@technologist.com>
GCS/E/S @d- s+:+>+:- a--->+++ C++ UB++++ P+ L- E--- W+++ !N !o ?K w---
?O M+ V-- PS+ PE++ Y+ PGP+>+++ t++ 5 X++ R+ tv+ b++>++++ DI+++ D+ 
G++>+++ e->++++ h! r-->+++ y?
Comment 2 Steve Price freebsd_committer freebsd_triage 1999-12-31 19:54:37 UTC
State Changed
From-To: open->closed

This patch already exists in the port and it does indeed compile and work 
on an up-to-date -current box.  Thanks. 
Comment 3 Steve Price freebsd_committer freebsd_triage 1999-12-31 19:55:48 UTC
State Changed
From-To: closed->open

I take that back.  This patch is *not* already in this port. 


Comment 4 Steve Price freebsd_committer freebsd_triage 1999-12-31 19:55:48 UTC
Responsible Changed
From-To: freebsd-ports->steve

I'll look into this shortly. 
Comment 5 Steve Price freebsd_committer freebsd_triage 1999-12-31 20:31:51 UTC
State Changed
From-To: open->closed

Alrighty now I think I got it. :)  Thanks for the patch.