Path: | icdoc!zmact61 |
From: | zmact61@doc.ic.ac.uk (D Spinellis) |
Newsgroups: | comp.unix.wizards |
Subject: | Re: Possible bug in sed(1) ? |
Summary: | It is a bug. |
Keywords: | sed |
Message-ID: | <1638@gould.doc.ic.ac.uk> |
Date: | 27 Feb 90 11:57:28 GMT |
References: | <1567@pttesac.UUCP> |
Sender: | news@doc.ic.ac.uk |
Reply-To: | dds@cc.ic.ac.uk (Diomidis Spinellis) |
Organization: | Imperial College Department of Computing |
Lines: | 92 |
Content-Length: | 2702 |
In article <1567@pttesac.UUCP> jlbrand@pttesac.UUCP (Jack Brand) writes:
>
>sed(1) gurus,
>
>I need help confirming whether I have found a bug in sed(1) or if
>I am misinterpreting the manual.
I presume it is time for a rerun.
From: diomidis@ecrcvax.UUCP (Diomidis Spinellis)
Newsgroups: comp.bugs.4bsd
Subject: Re: `t' command of sed does not work fine.
Message-ID: <760@ecrcvax.UUCP>
Date: 23 Aug 89 10:44:54 GMT
References: <2427@srava.sra.JUNET>
Reply-To: diomidis@ecrcvax.UUCP (Diomidis Spinellis)
Organization: ECRC, Munich 81, West Germany
Lines: 75
In article <2427@srava.sra.JUNET> katsu@sra.JUNET (Katsuhiro Watanabe) writes:
>
> Hello, world. I am using 4.3BSD on VAX.
> I found a bug on sed of BSDs, so I would like to report it.
>
> Even if no substitution have been made before `t'(since
>the most recent reading of and input line), it often branches.
>
> [...]
>
> Is this known yet?
I sent a bug report and fix to 4bsd-bugs@BERKELEY.EDU on May 18th 1989.
Here is the report and fix:
Subject: Sed does not clear the flag used by `t' when reading new input
Index: bin/sed 4.3BSD
Description:
According to the sed manual page the test command `t'
branches to the : command bearing the label specified
if any substitutions have been made since the most recent
reading of an input line or execution of a `t'.
In the 4.3BSD version of sed the reading of an input line
does not cancel the effect of substitutions made before
reading the new line. Thus if any of those substitutions
succeded the first `t' to be executed will succeeed even if
a new input line has been read.
Repeat-By:
Execute the following:
sed -e '
s/hello/goodbye/
/goodbye/d
t n
a\
t failed
b
: n
a\
t succeeded' <<EOF
hello
world
EOF
After reading the line containing `hello' the substitution will
succeed. The d command starts a new cycle and thus the next t
should fail unless a substitution succeeds again. After reading
`world' the substitution fails, but because of the bug, t succeeds
and the message `t succeeded' is printed.
Fix:
Modify "bin/sed/sed1.c" as follows:
*** sed1.c.orig Thu May 18 14:24:39 1989
--- sed1.c Thu May 18 14:19:48 1989
***************
*** 650,655 ****
--- 650,656 ----
{
register char *p1, *p2;
register c;
+ sflag = 0;
p1 = addr;
p2 = cbp;
for (;;) {
--
Diomidis Spinellis Internet: dds@cc.ic.ac.uk
Department of Computing UUCP: ...!ukc!iccc!dds
Imperial College JANET: dds@uk.ac.ic.cc
London SW7 2BZ #include "/dev/tty"
Newsgroup comp.unix.wizards contents
Newsgroup list
Diomidis Spinellis home page
Unless otherwise expressly stated, all original material on this page created by Diomidis Spinellis is licensed under a Creative Commons Attribution-Share Alike 3.0 Greece License.