[news.software.b] Minor bugs in recnews.c

matthew@sunpix.East.Sun.COM ( Sun Visualization Products) (06/06/90)

     After having two mail messages, which were for an internal newgroup, 
end up in newgroup "general", I set out to find the problem.

     What I found I would classify as 'Once in a blue moon problem'.  

     What was happening, was that any message ending in a double quote ended
up in the "general" newgroup.  Why? Because a bug in the pipeopen() function
would  cause  the uncontested  coping  of  the  next two characters  after a 
backslash, not just the next one. The cure? The simple removal of one of the
copy statements (line 395).

     During my analysis of the problem, I also noticed that backslashes were
being properly protected.  That fixed required slight changes to lines  161,
176, and 313.

     Below is a short patch to recnews.

#ifdef SCCSID
static char	*SccsId = "@(#)recnews.c	2.20	1/17/89";
#endif /* SCCSID */

*** recnews.c.orig	Wed Jun  6 09:00:20 1990
--- recnews.c	Wed Jun  6 09:06:17 1990
***************
*** 158,164 ****
  				p = buf + 8;
  			q = subject;
  			while (*++p) {
! 				if (*p == '"')
  					*q++ = '\\';
  				*q++ = *p;
  			}
--- 158,164 ----
  				p = buf + 8;
  			q = subject;
  			while (*++p) {
! 				if (*p == '"' || *p == '\\')
  					*q++ = '\\';
  				*q++ = *p;
  			}
***************
*** 173,179 ****
  				p = buf + 3;
  			q = to;
  			while (*++p) {
! 				if (*p == '"')
  					*q++ = '\\';
  				*q++ = *p;
  			}
--- 173,179 ----
  				p = buf + 3;
  			q = to;
  			while (*++p) {
! 				if (*p == '"' || *p == '\\')
  					*q++ = '\\';
  				*q++ = *p;
  			}
***************
*** 310,316 ****
  		p = buf + 4;
  	q = fbuf;
  	while (*++p) {
! 		if (*p == '"')
  			*q++ = '\\';
  		*q++ = *p;
  	}
--- 310,316 ----
  		p = buf + 4;
  	q = fbuf;
  	while (*++p) {
! 		if (*p == '"' || *p == '\\')
  			*q++ = '\\';
  		*q++ = *p;
  	}
***************
*** 392,398 ****
  					while (*cmd) {
  						if(*cmd == '\\') {
  							cmd++;
- 							*bcp++ = *cmd++;
  						} else if (*cmd == '"')
  							break;
  						*bcp++ = *cmd++;
--- 392,397 ----
-- 
Matthew Lee Stier                            |
Sun Microsystems ---  RTP, NC  27709-3447    |     "Wisconsin   Escapee"
uucp:  sun!mstier or mcnc!rti!sunpix!matthew |
phone: (919) 469-8300 fax: (919) 460-8355    |