I found a bug in ksh's parameter expansion on an edge case:

        true $(true "${USER#'"'}")

        /home/sh[4]: no closing quote

The problem seems to occurs when all of these conditions are present:

1. On ${var#pattern} or ${var%pattern} parameter expansion
2. When the pattern contains a singly quoted double quote: '"'
3. While expansion occurs withing $(...), (but not `...`)
4. While the expansion is quoted: "${var#pattern}".

true can be replaced by other commands or var=...
if '"' gets replaced by \", the issue disappear

The bin/ksh/lex.c seems to use a big switch+goto table with one label
per grammar context.  Maybe by jumping from context to context in a
specific pattern like above is producing the issue.

I did try to figure out where, but I lack time for now.

I hope the problem does not come from my way to test it and that it
have not been fixed.

$ uname -a  # also tested with /bin/ksh
OpenBSD t470s 6.2 GENERIC.MP#134 amd64

$ cvs co bin/ksh/; cd bin/ksh; make
[...]

$ ./ksh ~/sh
/home/sh[4]: no closing quote

Reply via email to