From 7c9af538d63b4623b38ef2fa9903e0f0344ffc32 Mon Sep 17 00:00:00 2001 From: "Barton E. Schaefer" Date: Fri, 20 Feb 2015 18:45:36 -0800 Subject: [PATCH] 34590: queue_signals() around more scopes that manipulate global state Upstream-commit: a4ff8e69570cbdb8e7d5bf1d5cc4000ffe63e15e Signed-off-by: Kamil Dudka --- Src/exec.c | 4 +++- Src/text.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Src/exec.c b/Src/exec.c index 04c8b50..b59eb5e 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -2320,6 +2320,7 @@ addvars(Estate state, Wordcode pc, int addflags) void setunderscore(char *str) { + queue_signals(); if (str && *str) { int l = strlen(str) + 1, nl = (l + 31) & ~31; @@ -2337,6 +2338,7 @@ setunderscore(char *str) *zunderscore = '\0'; underscoreused = 1; } + unqueue_signals(); } /* These describe the type of expansions that need to be done on the words @@ -5246,7 +5248,7 @@ execsave(void) { struct execstack *es; - es = (struct execstack *) malloc(sizeof(struct execstack)); + es = (struct execstack *) zalloc(sizeof(struct execstack)); es->list_pipe_pid = list_pipe_pid; es->nowait = nowait; es->pline_level = pline_level; diff --git a/Src/text.c b/Src/text.c index f55553e..8f8eb34 100644 --- a/Src/text.c +++ b/Src/text.c @@ -173,6 +173,8 @@ getpermtext(Eprog prog, Wordcode c, int start_indent) { struct estate s; + queue_signals(); + if (!c) c = prog->prog; @@ -193,6 +195,9 @@ getpermtext(Eprog prog, Wordcode c, int start_indent) *tptr = '\0'; freeeprog(prog); /* mark as unused */ untokenize(tbuf); + + unqueue_signals(); + return tbuf; } @@ -206,6 +211,8 @@ getjobtext(Eprog prog, Wordcode c) struct estate s; + queue_signals(); + if (!c) c = prog->prog; @@ -224,6 +231,9 @@ getjobtext(Eprog prog, Wordcode c) *tptr = '\0'; freeeprog(prog); /* mark as unused */ untokenize(jbuf); + + unqueue_signals(); + return jbuf; } @@ -879,6 +889,9 @@ getredirs(LinkList redirs) ">", ">|", ">>", ">>|", "&>", "&>|", "&>>", "&>>|", "<>", "<", "<<", "<<-", "<<<", "<&", ">&", NULL /* >&- */, "<", ">" }; + + queue_signals(); + taddchr(' '); for (n = firstnode(redirs); n; incnode(n)) { Redir f = (Redir) getdata(n); @@ -966,4 +979,6 @@ getredirs(LinkList redirs) } } tptr--; + + unqueue_signals(); } -- 2.1.0