Kamil Dudka b8ecd5
From 7cde13f288c79c9b3d3b2274e7b3dc1f08ee6eeb Mon Sep 17 00:00:00 2001
Kamil Dudka b8ecd5
From: "Barton E. Schaefer" <schaefer@zsh.org>
Kamil Dudka b8ecd5
Date: Wed, 29 Jul 2015 22:36:45 -0700
Kamil Dudka b8ecd5
Subject: [PATCH] 35953: fix handling of command substitution in math context
Kamil Dudka b8ecd5
Kamil Dudka b8ecd5
Upstream-commit: c0a80171ee615b52a15a6fc8efe83c2bb53451d2
Kamil Dudka b8ecd5
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
Kamil Dudka b8ecd5
---
Kamil Dudka b8ecd5
 Src/lex.c | 6 +++++-
Kamil Dudka b8ecd5
 1 file changed, 5 insertions(+), 1 deletion(-)
Kamil Dudka b8ecd5
Kamil Dudka b8ecd5
diff --git a/Src/lex.c b/Src/lex.c
Kamil Dudka b8ecd5
index 841fb0b..8710f75 100644
Kamil Dudka b8ecd5
--- a/Src/lex.c
Kamil Dudka b8ecd5
+++ b/Src/lex.c
Kamil Dudka b8ecd5
@@ -1387,7 +1387,7 @@ dquote_parse(char endchar, int sub)
Kamil Dudka b8ecd5
 {
Kamil Dudka b8ecd5
     int pct = 0, brct = 0, bct = 0, intick = 0, err = 0;
Kamil Dudka b8ecd5
     int c;
Kamil Dudka b8ecd5
-    int math = endchar == ')' || endchar == ']';
Kamil Dudka b8ecd5
+    int math = endchar == ')' || endchar == ']' || infor;
Kamil Dudka b8ecd5
     int zlemath = math && zlemetacs > zlemetall + addedx - inbufct;
Kamil Dudka b8ecd5
 
Kamil Dudka b8ecd5
     while (((c = hgetc()) != endchar || bct ||
Kamil Dudka b8ecd5
@@ -1994,8 +1994,10 @@ skipcomm(void)
Kamil Dudka b8ecd5
 #else
Kamil Dudka b8ecd5
     char *new_tokstr;
Kamil Dudka b8ecd5
     int new_lexstop, new_lex_add_raw;
Kamil Dudka b8ecd5
+    int save_infor = infor;
Kamil Dudka b8ecd5
     struct lexbufstate new_lexbuf;
Kamil Dudka b8ecd5
 
Kamil Dudka b8ecd5
+    infor = 0;
Kamil Dudka b8ecd5
     cmdpush(CS_CMDSUBST);
Kamil Dudka b8ecd5
     SETPARBEGIN
Kamil Dudka b8ecd5
     add(Inpar);
Kamil Dudka b8ecd5
@@ -2052,6 +2054,7 @@ skipcomm(void)
Kamil Dudka b8ecd5
      * the recursive parsing.
Kamil Dudka b8ecd5
      */
Kamil Dudka b8ecd5
     lexflags &= ~LEXFLAGS_ZLE;
Kamil Dudka b8ecd5
+    dbparens = 0;	/* restored by zcontext_restore_partial() */
Kamil Dudka b8ecd5
 
Kamil Dudka b8ecd5
     if (!parse_event(OUTPAR) || tok != OUTPAR)
Kamil Dudka b8ecd5
 	lexstop = 1;
Kamil Dudka b8ecd5
@@ -2098,6 +2101,7 @@ skipcomm(void)
Kamil Dudka b8ecd5
     if (!lexstop)
Kamil Dudka b8ecd5
 	SETPAREND
Kamil Dudka b8ecd5
     cmdpop();
Kamil Dudka b8ecd5
+    infor = save_infor;
Kamil Dudka b8ecd5
 
Kamil Dudka b8ecd5
     return lexstop;
Kamil Dudka b8ecd5
 #endif
Kamil Dudka b8ecd5
-- 
Kamil Dudka b8ecd5
2.4.6
Kamil Dudka b8ecd5