Skip to content
Snippets Groups Projects
Commit 7f31919c authored by Harald van Dijk's avatar Harald van Dijk Committed by Herbert Xu
Browse files

input: Fix here-document redirection with vi/emacs on


On 27/06/17 16:29, Zando Fardones wrote:
> Hello,
>
> I think I've found a bug when using the here-document redirection in
> an interactive shell. What basically happens is that you can't see the
> command output if you set the "vi" or "emacs" options.

That's not quite what happens: the here-document contents got lost, so
there is no command output to see. Nice find.

The problem is that getprompt() is implicitly called by el_gets(). This
messes with the memory used by the parser to store the here-document's
contents. In the non-emacs/vi case, the prompt is explicitly written by
setprompt(), which wraps the getprompt() call in a
pushstackmark()/popstackmark() pair to restore the state so that parsing
can continue. But when getprompt() is called by el_gets(), it knows
nothing about this.

The whole call to el_gets() can be surrounded by another
pushstackmark()/popstackmark() pair to solve the problem, as attached.

Cheers,
Harald van Dijk

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 68dac4c5
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -147,8 +147,12 @@ retry:
static const char *rl_cp;
static int el_len;
 
if (rl_cp == NULL)
if (rl_cp == NULL) {
struct stackmark smark;
pushstackmark(&smark, stackblocksize());
rl_cp = el_gets(el, &el_len);
popstackmark(&smark);
}
if (rl_cp == NULL)
nr = 0;
else {
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment