* [BUG] dash doesn't report syntax error when it should on stray "fi" @ 2012-04-23 16:53 Stefano Lattarini 2012-04-23 17:03 ` Jonathan Nieder 0 siblings, 1 reply; 9+ messages in thread From: Stefano Lattarini @ 2012-04-23 16:53 UTC (permalink / raw) To: dash How to reproduce: $ dash -c ':; fi'; echo stat = $? stat = 0 Behaviour of other shells: $ bash-4.1 -c ':; fi'; echo stat = $? # Bash 4.1.5 bash-4.1: -c: line 0: syntax error near unexpected token `fi' bash-4.1: -c: line 0: `:; fi' stat = 1 $ bash-3.2 -c ':; fi'; echo stat = $? # Bash 3.2.0 bash-3.2: -c: line 0: syntax error near unexpected token `fi' bash-3.2: -c: line 0: `:; fi' stat = 2 $ ksh -c ':; fi'; echo stat = $? # AT&T Ksh ksh: syntax error at line 1: `fi' unexpected stat = 3 $ pdksh -c ':; fi'; echo stat = $? # Public Domain Ksh, version 5.2.14 pdksh: syntax error: `fi' unexpected stat = 1 $ zsh -c ':; fi'; echo stat = $? # Zsh 4.3.12 zsh:1: parse error near `fi' stat = 1 Version information: $ dpkg -l dash ii dash 0.5.5.1-7.4 POSIX-compliant shell Regards, Stefano ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 16:53 [BUG] dash doesn't report syntax error when it should on stray "fi" Stefano Lattarini @ 2012-04-23 17:03 ` Jonathan Nieder 2012-04-23 17:09 ` Stefano Lattarini 2012-04-23 19:27 ` Chet Ramey 0 siblings, 2 replies; 9+ messages in thread From: Jonathan Nieder @ 2012-04-23 17:03 UTC (permalink / raw) To: Stefano Lattarini; +Cc: dash Hi Stefano, Stefano Lattarini wrote: > How to reproduce: > > $ dash -c ':; fi'; echo stat = $? > stat = 0 Since this doesn't affect conforming scripts, I suspect it falls squarely within the "patches welcome as long as they don't make dash bigger" category. Thanks for finding it. Sincerely, Jonathan ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 17:03 ` Jonathan Nieder @ 2012-04-23 17:09 ` Stefano Lattarini 2012-04-23 19:27 ` Chet Ramey 1 sibling, 0 replies; 9+ messages in thread From: Stefano Lattarini @ 2012-04-23 17:09 UTC (permalink / raw) To: Jonathan Nieder; +Cc: dash Hi Jonathan, thanks for the quick reply. On 04/23/2012 07:03 PM, Jonathan Nieder wrote: > Hi Stefano, > > Stefano Lattarini wrote: > >> How to reproduce: >> >> $ dash -c ':; fi'; echo stat = $? >> stat = 0 > > Since this doesn't affect conforming scripts, > True, it it makes "dash -n" less useful (not that I deeply care, just pointing it out). > I suspect it falls squarely within the "patches welcome as long as they > don't make dash bigger" category. > > Thanks for finding it. > > Sincerely, > Jonathan Thanks, Stefano ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 17:03 ` Jonathan Nieder 2012-04-23 17:09 ` Stefano Lattarini @ 2012-04-23 19:27 ` Chet Ramey 2012-04-23 19:44 ` Jonathan Nieder 1 sibling, 1 reply; 9+ messages in thread From: Chet Ramey @ 2012-04-23 19:27 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Stefano Lattarini, dash, chet.ramey On 4/23/12 1:03 PM, Jonathan Nieder wrote: > Hi Stefano, > > Stefano Lattarini wrote: > >> How to reproduce: >> >> $ dash -c ':; fi'; echo stat = $? >> stat = 0 > > Since this doesn't affect conforming scripts, I suspect it falls > squarely within the "patches welcome as long as they don't make dash > bigger" category. What are `conforming scripts'? Scripts without syntax errors? -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 19:27 ` Chet Ramey @ 2012-04-23 19:44 ` Jonathan Nieder 2012-04-23 19:48 ` Chet Ramey 2012-04-23 19:53 ` Stefano Lattarini 0 siblings, 2 replies; 9+ messages in thread From: Jonathan Nieder @ 2012-04-23 19:44 UTC (permalink / raw) To: Chet Ramey; +Cc: Stefano Lattarini, dash Chet Ramey wrote: > What are `conforming scripts'? Scripts without syntax errors? I meant "conforming POSIX applications". A patch for this might even be welcome if it makes dash bigger, if that's what you're wondering. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 19:44 ` Jonathan Nieder @ 2012-04-23 19:48 ` Chet Ramey 2012-04-23 19:54 ` Jonathan Nieder 2012-04-23 19:53 ` Stefano Lattarini 1 sibling, 1 reply; 9+ messages in thread From: Chet Ramey @ 2012-04-23 19:48 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Chet Ramey, Stefano Lattarini, dash On 4/23/12 3:44 PM, Jonathan Nieder wrote: > Chet Ramey wrote: > >> What are `conforming scripts'? Scripts without syntax errors? > > I meant "conforming POSIX applications". > > A patch for this might even be welcome if it makes dash bigger, if > that's what you're wondering. The way I read 2.10.2, Posix requires that the "fi" resolve to the reserved word `fi' in this case, since it's in a position where a command name is expected (Rule 1, [Command Name]). I would think that would make it a syntax error in any application, conforming or not. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 19:48 ` Chet Ramey @ 2012-04-23 19:54 ` Jonathan Nieder 2012-04-24 22:47 ` Jilles Tjoelker 0 siblings, 1 reply; 9+ messages in thread From: Jonathan Nieder @ 2012-04-23 19:54 UTC (permalink / raw) To: Chet Ramey; +Cc: Stefano Lattarini, dash Chet Ramey wrote: > The way I read 2.10.2, Posix requires that the "fi" resolve to the > reserved word `fi' in this case, since it's in a position where a > command name is expected (Rule 1, [Command Name]). I would think that > would make it a syntax error in any application, conforming or not. Yes, I think you're right. For some reason I thought that using reserved words in ways not permitted by the grammar produced undefined behavior, to support shells with extensions like the arithmetic "for". But now that I read more closely, it looks like "function", "[[", "]]", and "select" produce unspecified behavior but everything else is pretty well specified. Thanks for clarifying. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 19:54 ` Jonathan Nieder @ 2012-04-24 22:47 ` Jilles Tjoelker 0 siblings, 0 replies; 9+ messages in thread From: Jilles Tjoelker @ 2012-04-24 22:47 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Chet Ramey, Stefano Lattarini, dash On Mon, Apr 23, 2012 at 02:54:58PM -0500, Jonathan Nieder wrote: > Chet Ramey wrote: > > The way I read 2.10.2, Posix requires that the "fi" resolve to the > > reserved word `fi' in this case, since it's in a position where a > > command name is expected (Rule 1, [Command Name]). I would think that > > would make it a syntax error in any application, conforming or not. > Yes, I think you're right. > For some reason I thought that using reserved words in ways not > permitted by the grammar produced undefined behavior, to support > shells with extensions like the arithmetic "for". But now that I read > more closely, it looks like "function", "[[", "]]", and "select" > produce unspecified behavior but everything else is pretty well > specified. Thanks for clarifying. In what way does a lone "fi" differ from constructions like the below, which do not match the POSIX grammar but are accepted by some subset of shells that attempt to comply to POSIX: case x in (esac) ;; esac for i; do echo "$i"; done for i; do echo "$i"; done for i { echo "$i"; } for ((i = 0; i < 10; i += 1)) do echo "$i"; done f() : The only difference seems to be that the lone "fi" is somehow "wrong" while the above are not "wrong". That's too vague for a specification. Unfortunately, the XCU volume is very thin on constraints (as found, for example, in the C standard). Many ways to do things "wrong" are instead left open for implementation extensions. In practice, many such extensions exist. That said, rejecting the lone "fi" is still a quality of implementation issue, particularly because dash's current behaviour is poorly defined. I fixed it in FreeBSD a while ago (9.0 has the fix). In making this change, a testsuite is very useful to guard against bugs and to ensure no cases are missed, but latent bugs in shell scripts may still cause annoyance. If there is an error in a command substitution that is normally not executed, most shells (except ash derivatives) will not notice this. For example, FreeBSD 9.0's sh is one of the few shells that detects the error in: if false; then `fi`; fi -- Jilles Tjoelker ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [BUG] dash doesn't report syntax error when it should on stray "fi" 2012-04-23 19:44 ` Jonathan Nieder 2012-04-23 19:48 ` Chet Ramey @ 2012-04-23 19:53 ` Stefano Lattarini 1 sibling, 0 replies; 9+ messages in thread From: Stefano Lattarini @ 2012-04-23 19:53 UTC (permalink / raw) To: Jonathan Nieder; +Cc: Chet Ramey, dash Hi Jonathan, Chet. On 04/23/2012 09:44 PM, Jonathan Nieder wrote: > Chet Ramey wrote: > >> What are `conforming scripts'? Scripts without syntax errors? > > I meant "conforming POSIX applications". > > A patch for this might even be welcome if it makes dash bigger, if > that's what you're wondering. > I have no patch, but a little more information that might help anyone who volunteers to write one: $ nl=$'\n' $ dash -c ":$nl fi" && echo NOERR dash: Syntax error: "fi" unexpected $ dash -c ":;$nl fi" && echo NOERR dash: Syntax error: "fi" unexpected $ dash -c ":&$nl fi" && echo NOERR dash: Syntax error: "fi" unexpected $ dash -c ": && fi" && echo NOERR dash: Syntax error: "fi" unexpected The problem seems to only be present when a stray "fi" comes after a '&' or ';' -- see: $ dash -c ":; fi" && echo NOERR NOERR dash -c ":& fi" && echo NOERR NOERR The same goes for other loops/conditionals terminators: $ dash -c ":; done" && echo NOERR NOERR $ dash -c ":; esac" && echo NOERR NOERR $ dash -c ":& elif" && echo NOERR NOERR HTH, Stefano ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-04-24 22:47 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-04-23 16:53 [BUG] dash doesn't report syntax error when it should on stray "fi" Stefano Lattarini 2012-04-23 17:03 ` Jonathan Nieder 2012-04-23 17:09 ` Stefano Lattarini 2012-04-23 19:27 ` Chet Ramey 2012-04-23 19:44 ` Jonathan Nieder 2012-04-23 19:48 ` Chet Ramey 2012-04-23 19:54 ` Jonathan Nieder 2012-04-24 22:47 ` Jilles Tjoelker 2012-04-23 19:53 ` Stefano Lattarini
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.