summary refs log tree commit diff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2018-05-11 23:41:25 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2018-05-15 13:57:27 +0800
commit469c5fd4f57622b1a6571172898ab29430319d4a (patch)
tree028af010f14484aa3263d68e5cb262cba60fdb60
parentRelease 0.5.10.1. (diff)
downloaddash-469c5fd4f57622b1a6571172898ab29430319d4a.tar.gz
dash-469c5fd4f57622b1a6571172898ab29430319d4a.zip
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>
Diffstat (limited to '')
-rw-r--r--src/parser.c11
1 files 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:
d>June McEnroe 2018-11-30Ignore sandmanJune McEnroe 2018-11-30Add sandmanJune McEnroe 2018-11-29Strip timestamps from log replayJune McEnroe 2018-11-29Add basic log replayJune McEnroe 2018-11-29Show unread count in term titleJune McEnroe 2018-11-29Handle no such nick errorJune McEnroe 2018-11-29Add /whoisJune McEnroe 2018-11-29Set LIBRESSL_PREFIX in Darwin.mkJune McEnroe 2018-11-28Add NetBSD.mkJune McEnroe 2018-11-28Make use of config.mk and add Darwin.mkJune McEnroe