GNU bug report logs -
#20095
conditional branching
Previous Next
Reported by: Erik Popp <epopp <at> i2pmail.org>
Date: Thu, 12 Mar 2015 06:54:01 UTC
Severity: normal
Done: Jim Meyering <jim <at> meyering.net>
Bug is archived. No further changes may be made.
Full log
Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
On Thu, 12 Mar 2015 02:42:07 +0000 (UTC), Erik Popp <epopp <at> i2pmail.org>
wrote:
> I'm using sed to verify that a log file is in the correct format, to make
> it impossible for crafted input to cause any problems in a shell script.
>
> I'm stumped, and the only explanation that I can think of for why my
> script isn't working is that sed's "t" command is not working properly.
>
> If I comment out any 2 of the 3 main commands, the output is as expected:
> white space stripper always "succeeds", and thus the script jumps to the
> success section curly brace detector jumps to the "success" section if
> triggered. otherwise, the t command fails, because there wasn't a
> substitution in the first place entry converter succeeds if format of
> entry is valid, assuming that there isn't any surrounding white space
> However, if I un-comment all 3 of the main commands, the script doesn't
> fail when input is invalid. Instead, it spits out the un-transformed
> invalid input, as if it was valid.
>
> Am I missing something, or is this a bug?
If I understand correctly (I've had only a quick look at the code): the
description for the "t" command says
Branch to LABEL only if there has been a successful `s'ubstitution
since the last input line was read or conditional branch was taken.
The LABEL may be omitted, in which case the next cycle is started.
(note: since the last conditional branch was taken) which, in simple terms,
means that with this sample code:
s/foo/bar/
s/xxx/yyy/
t successxxx
the code will branch to :successxxx if *either* substitution succeeds.
For this reason it's sometimes needed to "reset" the state of the "t"
command, so to speak, as follows:
s/foo/bar/
t successfoo
:successfoo
s/xxx/yyy/
t successxxx
with this modification, the code will branch to :successxxx only if the
last substitution succeeds.
--
D.
This bug report was last modified 10 years and 12 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.