|
|
|
From 469c5fd4f57622b1a6571172898ab29430319d4a Mon Sep 17 00:00:00 2001
|
|
|
|
From: Herbert Xu <herbert@gondor.apana.org.au>
|
|
|
|
Date: Fri, 11 May 2018 23:41:25 +0800
|
|
|
|
Subject: parser: Fix incorrect eating of backslash newlines
|
|
|
|
|
|
|
|
With the introduction of synstack->syntax, a number of references
|
|
|
|
to the syntax variable was missed during the conversion. This
|
|
|
|
causes backslash newlines to be incorrectly removed in single
|
|
|
|
quote context.
|
|
|
|
|
|
|
|
This patch also combines these calls into a new helper function
|
|
|
|
pgetc_top.
|
|
|
|
|
|
|
|
Fixes: ab1cecb40478 ("parser: Add syntax stack for recursive...")
|
|
|
|
Reported-by: Leah Neukirchen <leah@vuxu.org>
|
|
|
|
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
|
|
---
|
|
|
|
src/parser.c | 11 ++++++++---
|
|
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
|
|
|
|
diff --git a/src/parser.c b/src/parser.c
|
|
|
|
index 8e40781..8bd3db4 100644
|
|
|
|
--- a/src/parser.c
|
|
|
|
+++ b/src/parser.c
|
|
|
|
@@ -853,6 +853,11 @@ static int pgetc_eatbnl(void)
|
|
|
|
return c;
|
|
|
|
}
|
|
|
|
|
|
|
|
+static int pgetc_top(struct synstack *stack)
|
|
|
|
+{
|
|
|
|
+ return stack->syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static void synstack_push(struct synstack **stack, struct synstack *next,
|
|
|
|
const char *syntax)
|
|
|
|
{
|
|
|
|
@@ -915,7 +920,7 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs)
|
|
|
|
attyline();
|
|
|
|
if (synstack->syntax == BASESYNTAX)
|
|
|
|
return readtoken();
|
|
|
|
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
|
|
|
+ c = pgetc_top(synstack);
|
|
|
|
goto loop;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
@@ -929,7 +934,7 @@ readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs)
|
|
|
|
goto endword; /* exit outer loop */
|
|
|
|
USTPUTC(c, out);
|
|
|
|
nlprompt();
|
|
|
|
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
|
|
|
+ c = pgetc_top(synstack);
|
|
|
|
goto loop; /* continue outer loop */
|
|
|
|
case CWORD:
|
|
|
|
USTPUTC(c, out);
|
|
|
|
@@ -1056,7 +1061,7 @@ toggledq:
|
|
|
|
USTPUTC(c, out);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
- c = syntax == SQSYNTAX ? pgetc() : pgetc_eatbnl();
|
|
|
|
+ c = pgetc_top(synstack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
endword:
|
|
|
|
--
|
|
|
|
cgit v1.1
|
|
|
|
|