On Sat, Mar 07, 2015 at 07:16:53AM +0100, Sébastien Marie wrote:
> Hi,
> 
> I encounter a problem of parsing in ksh(1): a quote in a comment in a
> command substitution $(...) or `...` is parsed as quote and a closing quote
> is expected.
> 
> Here code snippet that expose the problem:
> 
> $ cat test.sh
> echo $(echo abc |
>       # comment
>       cat)
> 
> echo $(echo abc |
>       # comment with quote '
>       cat)
> 
> $ ksh ./test.sh
> abc
> ./test.sh[9]: no closing quote
> 
> 
> As side note, bash(1) don't have this parsing problem.
> 
> $ bash ./test.sh
> abc
> abc
> $ 
> 
> Thanks.

Here a patch to address this problem.

It just adds comment stripping in $(...) parsing.

I think the patch need good review: I haven't tested it deeply.

Thanks.
-- 
Sébastien Marie


Index: lex.c
===================================================================
RCS file: /cvs/src/bin/ksh/lex.c,v
retrieving revision 1.49
diff -u -p -r1.49 lex.c
--- lex.c       17 Dec 2013 16:37:06 -0000      1.49
+++ lex.c       9 Mar 2015 05:18:19 -0000
@@ -475,6 +475,12 @@ yylex(int cf)
                                        statep->ls_scsparen.csstate = 4;
                                        ignore_backslash_newline++;
                                        break;
+                               case '#':
+                                       ignore_backslash_newline++;
+                                       while ((c = getsc()) != '\0' && c != 
'\n')
+                                               ;
+                                       ignore_backslash_newline--;
+                                       ungetsc(c);
                                }
                                break;
 

Reply via email to