rn bugs #20-22
Larry Wall
lwall at sdcrdcf.UUCP
Thu Nov 1 10:08:20 AEST 1984
#!/bin/sh
: make a subdirectory, cd to it, and run this through sh.
echo 'If this kit is complete, "End of kit" will echo at the end'
echo Extracting index
cat >index <<'!STUFFY!FUNK!'
bug1: Subject: %i and %R use old Article-I.D. line
bug2: Subject: rn may get confused about minimum article numbers
bug3: Subject: rn on System V--circular dependency
bug4: Subject: 2.10.2 disables checkexpired() optimization.
bug5: Subject: Xref patch for 2.10.1 inews is wrong.
bug6: Subject: articles saved to mailbox start with "From: " instead of "From ".
bug7: Subject: core dump on portable rn
bug8: Subject: <sys/ioctl> not found on V7
bug9: Subject: int vs. long
bug10: Subject: %d vs %ld
bug11: Subject: R and F may not include article.
bug12: Subject: missing free() on pdp11's
bug13: Subject: switch bugs
bug14: Subject: missing ; if DEBUGGING not defined
bug15: Subject: (Mail) happens inappropriately.
bug16: Subject: & substitution in fullname incorrect
bug17: Subject: null junk files and checkgroups that want to remove everything
bug18: Subject: rn does switches before looking up baud rate
bug19: Subject: Pnews can say misleading things about distributions.
bug20: Subject: KILL files blow up because '/' not considered a metacharacter
bug21: Subject: filexp (the shell script) doesn't do ~/ or ~ right.
bug22: Subject: unread article count can get off when articles expire
!STUFFY!FUNK!
echo Extracting bug20
cat >bug20 <<'!STUFFY!FUNK!'
System: rn version 4.1
Bug #: 20
Subject: KILL files blow up because '/' not considered a metacharacter
Index: artsrch.c
From: ber at yquem.UUCP
Description:
When rn is processing subjects to turn them into search strings, it
translates search meta-characters into '.'. Unfortunately, '/',
while not strictly a search meta-character, is the search string
delimiter used by the 'K' command, and needs to be included in the
list of special characters. (Note that '?' does not need to be
a special character since 'K' only uses '/'.)
Repeat-By:
Find an article with a subject containing a slash. Type 'K' to put
the subject into the KILL file. Type '-' to get back to the article
and 'm' to mark it unread. Exit the newsgroup and reenter it.
Watch the fireworks as rn tries to interpret the end of the subject
as a list of commands.
Fix: Install either artsrch.c.20-c (diff -c) by hand or artsrch.c.20-e
(diff -e) using ed. The -e version must be applied only to a stock
revision 4.1 artsrch.c.
To repair a KILL file with this problem, edit the KILL file, find
the offending '/', and either quote it with a backslash, or replace
it with a '.'.
!STUFFY!FUNK!
echo Extracting artsrch.c.20-c
cat >artsrch.c.20-c <<'!STUFFY!FUNK!'
*** /tmp/,RCSt1012951 Wed Oct 31 09:57:39 1984
--- /tmp/,RCSt2012951 Wed Oct 31 09:57:44 1984
***************
*** 1,4
! /* $Header: artsrch.c,v 4.1 84/09/24 11:42:18 lwall Exp $
*
* $Log: artsrch.c,v $
* Revision 4.1 84/09/24 11:42:18 lwall
--- 1,4 -----
! /* $Header: artsrch.c,v 4.1.1.2 84/10/31 09:55:45 lwall Exp $
*
* $Log: artsrch.c,v $
* Revision 4.1.1.2 84/10/31 09:55:45 lwall
***************
*** 1,6
/* $Header: artsrch.c,v 4.1 84/09/24 11:42:18 lwall Exp $
*
* $Log: artsrch.c,v $
* Revision 4.1 84/09/24 11:42:18 lwall
* Real baseline.
*
--- 1,12 -----
/* $Header: artsrch.c,v 4.1.1.2 84/10/31 09:55:45 lwall Exp $
*
* $Log: artsrch.c,v $
+ * Revision 4.1.1.2 84/10/31 09:55:45 lwall
+ * Added / to list of search meta-characters.
+ *
+ * Revision 4.1.1.1 84/09/25 13:20:11 lwall
+ * Branch for sdcrdcf changes.
+ *
* Revision 4.1 84/09/24 11:42:18 lwall
* Real baseline.
*
***************
*** 150,156
srchahead = -1;
h[24] = '\0'; /* compensate for notesfiles */
while (*h) {
! if (index("\\[.^*$'\"",*h) != Nullch)
*h++ = '.';
else
h++;
--- 156,162 -----
srchahead = -1;
h[24] = '\0'; /* compensate for notesfiles */
while (*h) {
! if (index("/\\[.^*$'\"",*h) != Nullch)
*h++ = '.';
else
h++;
!STUFFY!FUNK!
echo Extracting artsrch.c.20-e
sed >artsrch.c.20-e <<'!STUFFY!FUNK!' -e 's/X//'
X153c
X if (index("/\\[.^*$'\"",*h) != Nullch)
X.
X3a
X * Revision 4.1.1.2 84/10/31 09:55:45 lwall
X * Added / to list of search meta-characters.
X *
X * Revision 4.1.1.1 84/09/25 13:20:11 lwall
X * Branch for sdcrdcf changes.
X *
X.
X1c
X/* $Header: artsrch.c,v 4.1.1.2 84/10/31 09:55:45 lwall Exp $
X.
!STUFFY!FUNK!
echo Extracting bug21
cat >bug21 <<'!STUFFY!FUNK!'
System: rn version 4.1
Bug #: 21
Subject: filexp (the shell script) doesn't do ~/ or ~ right.
Index: Configure
From: steven at mcvax.UUCP (Steven Pemberton)
Description:
There is a little shell script spit out by Configure to do tilde (~)
substitution on systems that don't have csh. Unfortunately, it
doesn't do ~ or ~/* correctly if your home directory name happens
to contain a slash (heh heh).
Repeat-By:
Say "filexp ~".
Fix: You can change this either in Configure or in filexp itself as you
see fit.
Change
: expand filename
case $1 in
~/*|~)
! /bin/echo $1 | /bin/sed "s/~/${HOME-$LOGDIR}/"
;;
~*)
if /bin/test -f /bin/csh; then
to
: expand filename
case $1 in
~/*|~)
! /bin/echo $1 | /bin/sed "s|~|${HOME-$LOGDIR}|"
;;
~*)
if /bin/test -f /bin/csh; then
unless your home directory happens to contain '|', which I doubt.
!STUFFY!FUNK!
echo Extracting bug22
cat >bug22 <<'!STUFFY!FUNK!'
System: rn version 4.1
Bug #: 22
Subject: unread article count can get off when articles expire
Index: bits.c
From: uddeborg at chalmers.UUCP (G|ran Uddeborg)
Description:
Rn makes a faulty assumption about the read/unread status of
certain expired articles when entering a newsgroup, with the
result that the number of articles reported as remaining to be read
will be low, and possibly even negative. This doesn't hurt anything
in particular, but it is somewhat disconcerting.
Repeat-By:
Find a newsgroup in which the first existing article is followed
by a range of expired articles. If for instance, you have a newsgroup
in which article 100 exists, as well as articles 200-300, edit your
.newsrc to read:
net.blurfl: 1-100,110-190,200-299
If you then enter this newsgroup with rn, in trying to process
expired articles 101-199 it will forget that you have read 110-190,
and count them twice when it marks 101-199 as read. In this example
you would end up with rn saying there are about -80 unread articles.
Fix: Install either bits.c.22-c (diff -c) by hand or bits.c.22-e (diff -e)
using ed. The -e version must be applied only to a stock revision
4.1 bits.c.
!STUFFY!FUNK!
echo Extracting bits.c.22-c
cat >bits.c.22-c <<'!STUFFY!FUNK!'
*** /tmp/,RCSt1015166 Wed Oct 31 12:01:42 1984
--- /tmp/,RCSt2015166 Wed Oct 31 12:01:45 1984
***************
*** 1,4
! /* $Header: bits.c,v 4.1 84/09/24 11:43:17 lwall Exp $
*
* $Log: bits.c,v $
* Revision 4.1 84/09/24 11:43:17 lwall
--- 1,4 -----
! /* $Header: bits.c,v 4.1.1.2 84/10/31 11:58:50 lwall Exp $
*
* $Log: bits.c,v $
* Revision 4.1.1.2 84/10/31 11:58:50 lwall
***************
*** 1,6
/* $Header: bits.c,v 4.1 84/09/24 11:43:17 lwall Exp $
*
* $Log: bits.c,v $
* Revision 4.1 84/09/24 11:43:17 lwall
* Real baseline.
*
--- 1,14 -----
/* $Header: bits.c,v 4.1.1.2 84/10/31 11:58:50 lwall Exp $
*
* $Log: bits.c,v $
+ * Revision 4.1.1.2 84/10/31 11:58:50 lwall
+ * initctl() wrongly assumed that expired articles were unread when trying
+ * to adjust firstart, and misadjusted toread[ng]. toread[ng] is now
+ * recomputed from scratch.
+ *
+ * Revision 4.1.1.1 84/09/25 13:20:31 lwall
+ * Branch for sdcrdcf changes.
+ *
* Revision 4.1 84/09/24 11:43:17 lwall
* Real baseline.
*
***************
*** 370,375
char *mybuf = buf; /* place to decode rc line */
register char *s, *c, *h;
register long i;
#ifdef DELAYMARK
dmcount = 0;
--- 378,384 -----
char *mybuf = buf; /* place to decode rc line */
register char *s, *c, *h;
register long i;
+ register ART_NUM unread;
#ifdef DELAYMARK
dmcount = 0;
***************
*** 403,409
else
firstart = 1; /* all the bits are valid for now */
if (absfirst > firstart) { /* do we know already? */
- toread[ng] -= (ART_UNREAD)(absfirst - firstart);
firstart = absfirst; /* no point calling getngmin again */
}
else if (artopen(firstart) == Nullfp) {
--- 412,417 -----
else
firstart = 1; /* all the bits are valid for now */
if (absfirst > firstart) { /* do we know already? */
firstart = absfirst; /* no point calling getngmin again */
}
else if (artopen(firstart) == Nullfp) {
***************
*** 410,416
/* first unread article missing? */
i = getngmin(".",firstart); /* see if expire has been busy */
if (i) { /* avoid a bunch of extra opens */
- toread[ng] -= (ART_UNREAD)(i - firstart);
firstart = i;
}
}
--- 418,423 -----
/* first unread article missing? */
i = getngmin(".",firstart); /* see if expire has been busy */
if (i) { /* avoid a bunch of extra opens */
firstart = i;
}
}
***************
*** 419,424
subj_to_get = firstart;
# endif
#endif
for (i=OFFSET(firstart)/BITSPERBYTE; i<ctlsize; i++)
ctlarea[i] = 0; /* assume unread */
#ifdef DEBUGGING
--- 426,432 -----
subj_to_get = firstart;
# endif
#endif
+ unread = lastart - firstart + 1; /* assume this range unread */
for (i=OFFSET(firstart)/BITSPERBYTE; i<ctlsize; i++)
ctlarea[i] = 0; /* assume unread */
#ifdef DEBUGGING
***************
*** 442,447
min = firstart;
if (max > lastart)
max = lastart;
for (i=min; i<=max; i++) /* for all articles in range */
/*NOSTRICT*/
ctl_set(i); /* mark them read */
--- 450,457 -----
min = firstart;
if (max > lastart)
max = lastart;
+ if (min <= max) /* non-null range? */
+ unread -= max - min + 1;/* adjust unread count */
for (i=min; i<=max; i++) /* for all articles in range */
/*NOSTRICT*/
ctl_set(i); /* mark them read */
***************
*** 446,452
/*NOSTRICT*/
ctl_set(i); /* mark them read */
}
! else if ((i = atol(s)) >= firstart && i <= lastart)
/* is single number reasonable? */
/*NOSTRICT*/
ctl_set(i); /* mark it read */
--- 456,462 -----
/*NOSTRICT*/
ctl_set(i); /* mark them read */
}
! else if ((i = atol(s)) >= firstart && i <= lastart) {
/* is single number reasonable? */
/*NOSTRICT*/
ctl_set(i); /* mark it read */
***************
*** 450,455
/* is single number reasonable? */
/*NOSTRICT*/
ctl_set(i); /* mark it read */
#ifdef DEBUGGING
if (debug & DEB_CTLAREA_BITMAP) {
printf("\n%s\n",s);
--- 460,467 -----
/* is single number reasonable? */
/*NOSTRICT*/
ctl_set(i); /* mark it read */
+ unread--; /* decrement articles to read */
+ }
#ifdef DEBUGGING
if (debug & DEB_CTLAREA_BITMAP) {
printf("\n%s\n",s);
***************
*** 468,473
#endif
if (mybuf != buf)
free(mybuf);
return 0;
}
--- 480,486 -----
#endif
if (mybuf != buf)
free(mybuf);
+ toread[ng] = unread;
return 0;
}
!STUFFY!FUNK!
echo Extracting bits.c.22-e
sed >bits.c.22-e <<'!STUFFY!FUNK!' -e 's/X//'
X470a
X toread[ng] = unread;
X.
X452a
X unread--; /* decrement articles to read */
X }
X.
X449c
X else if ((i = atol(s)) >= firstart && i <= lastart) {
X.
X444a
X if (min <= max) /* non-null range? */
X unread -= max - min + 1;/* adjust unread count */
X.
X421a
X unread = lastart - firstart + 1; /* assume this range unread */
X.
X413d
X406d
X372a
X register ART_NUM unread;
X.
X3a
X * Revision 4.1.1.2 84/10/31 11:58:50 lwall
X * initctl() wrongly assumed that expired articles were unread when trying
X * to adjust firstart, and misadjusted toread[ng]. toread[ng] is now
X * recomputed from scratch.
X *
X * Revision 4.1.1.1 84/09/25 13:20:31 lwall
X * Branch for sdcrdcf changes.
X *
X.
X1c
X/* $Header: bits.c,v 4.1.1.2 84/10/31 11:58:50 lwall Exp $
X.
!STUFFY!FUNK!
echo ""
echo "End of kit"
: I do not append .signature, but someone might mail this.
exit
More information about the Comp.sources.bugs
mailing list