[Pkg-zsh-commits] [zsh] 01/02: Cherry-pick 87270496 from upstream: Fixes hanging in freejob from TRAPCHLD
Axel Beckert
abe at deuxchevaux.org
Wed Oct 1 19:32:47 UTC 2014
This is an automated email from the git hooks/post-receive script.
abe pushed a commit to branch debian
in repository zsh.
commit 16aa8c8467bcecfa7dfaffd0050caa9b78346b29
Author: Axel Beckert <abe at deuxchevaux.org>
Date: Wed Oct 1 20:49:21 2014 +0200
Cherry-pick 87270496 from upstream: Fixes hanging in freejob from TRAPCHLD
Mitigates if not fixes: #760061
---
...-pick-87270496-make-lexrestore-more-signal-safe | 136 +++++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 137 insertions(+)
diff --git a/debian/patches/cherry-pick-87270496-make-lexrestore-more-signal-safe b/debian/patches/cherry-pick-87270496-make-lexrestore-more-signal-safe
new file mode 100644
index 0000000..9574ddf
--- /dev/null
+++ b/debian/patches/cherry-pick-87270496-make-lexrestore-more-signal-safe
@@ -0,0 +1,136 @@
+Origin: commit 8727049674b1f39a8926c02dc74e9f19bbd70289
+Author: Barton E. Schaefer <schaefer at zsh.org>
+Date: Tue Sep 30 20:34:58 2014 -0700
+Bug: http://www.zsh.org/mla/workers/2014/msg01083.html
+Bug-Debian: https://bugs.debian.org/760061
+Description: make lexrestore() more signal-safe
+ At least mitigates #760061.
+
+diff --git a/Src/lex.c b/Src/lex.c
+index 8e9a49f..1a854f5 100644
+--- a/Src/lex.c
++++ b/Src/lex.c
+@@ -325,66 +325,70 @@ lexsave(void)
+ mod_export void
+ lexrestore(void)
+ {
+- struct lexstack *ln;
++ struct lexstack *ln = lstack;
+
+ DPUTS(!lstack, "BUG: lexrestore() without lexsave()");
+- incmdpos = lstack->incmdpos;
+- incond = lstack->incond;
+- incasepat = lstack->incasepat;
+- dbparens = lstack->dbparens;
+- isfirstln = lstack->isfirstln;
+- isfirstch = lstack->isfirstch;
+- histactive = lstack->histactive;
+- histdone = lstack->histdone;
+- lexflags = lstack->lexflags;
+- stophist = lstack->stophist;
+- chline = lstack->hline;
+- hptr = lstack->hptr;
++
++ queue_signals();
++ lstack = lstack->next;
++
++ if (!lstack) {
++ /* Back to top level: don't need special ZLE value */
++ DPUTS(ln->hline != zle_chline, "BUG: Ouch, wrong chline for ZLE");
++ zle_chline = NULL;
++ }
++
++ incmdpos = ln->incmdpos;
++ incond = ln->incond;
++ incasepat = ln->incasepat;
++ dbparens = ln->dbparens;
++ isfirstln = ln->isfirstln;
++ isfirstch = ln->isfirstch;
++ histactive = ln->histactive;
++ histdone = ln->histdone;
++ lexflags = ln->lexflags;
++ stophist = ln->stophist;
++ chline = ln->hline;
++ hptr = ln->hptr;
+ if (cmdstack)
+- free(cmdstack);
+- cmdstack = lstack->cstack;
+- cmdsp = lstack->csp;
+- tok = lstack->tok;
+- isnewlin = lstack->isnewlin;
+- tokstr = lstack->tokstr;
+- zshlextext = lstack->zshlextext;
+- bptr = lstack->bptr;
+- bsiz = lstack->bsiz;
+- len = lstack->len;
+- chwords = lstack->chwords;
+- chwordlen = lstack->chwordlen;
+- chwordpos = lstack->chwordpos;
+- hwgetword = lstack->hwgetword;
+- lexstop = lstack->lexstop;
+- hdocs = lstack->hdocs;
+- hgetc = lstack->hgetc;
+- hungetc = lstack->hungetc;
+- hwaddc = lstack->hwaddc;
+- hwbegin = lstack->hwbegin;
+- hwend = lstack->hwend;
+- addtoline = lstack->addtoline;
++ zfree(cmdstack, CMDSTACKSZ);
++ cmdstack = ln->cstack;
++ cmdsp = ln->csp;
++ tok = ln->tok;
++ isnewlin = ln->isnewlin;
++ tokstr = ln->tokstr;
++ zshlextext = ln->zshlextext;
++ bptr = ln->bptr;
++ bsiz = ln->bsiz;
++ len = ln->len;
++ chwords = ln->chwords;
++ chwordlen = ln->chwordlen;
++ chwordpos = ln->chwordpos;
++ hwgetword = ln->hwgetword;
++ lexstop = ln->lexstop;
++ hdocs = ln->hdocs;
++ hgetc = ln->hgetc;
++ hungetc = ln->hungetc;
++ hwaddc = ln->hwaddc;
++ hwbegin = ln->hwbegin;
++ hwend = ln->hwend;
++ addtoline = ln->addtoline;
+ if (ecbuf)
+ zfree(ecbuf, eclen);
+- eclen = lstack->eclen;
+- ecused = lstack->ecused;
+- ecnpats = lstack->ecnpats;
+- ecbuf = lstack->ecbuf;
+- ecstrs = lstack->ecstrs;
+- ecsoffs = lstack->ecsoffs;
+- ecssub = lstack->ecssub;
+- ecnfunc = lstack->ecnfunc;
+- hlinesz = lstack->hlinesz;
+- toklineno = lstack->toklineno;
++ eclen = ln->eclen;
++ ecused = ln->ecused;
++ ecnpats = ln->ecnpats;
++ ecbuf = ln->ecbuf;
++ ecstrs = ln->ecstrs;
++ ecsoffs = ln->ecsoffs;
++ ecssub = ln->ecssub;
++ ecnfunc = ln->ecnfunc;
++ hlinesz = ln->hlinesz;
++ toklineno = ln->toklineno;
+ errflag = 0;
++ free(ln);
+
+- ln = lstack->next;
+- if (!ln) {
+- /* Back to top level: don't need special ZLE value */
+- DPUTS(chline != zle_chline, "BUG: Ouch, wrong chline for ZLE");
+- zle_chline = NULL;
+- }
+- free(lstack);
+- lstack = ln;
++ unqueue_signals();
+ }
+
+ /**/
diff --git a/debian/patches/series b/debian/patches/series
index 6bbc67f..f9bc353 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
replace-texi2html-with-makeinfo
cherry-pick-4414e54e-prevent-double-locking-with-shared-or-incremental-history
+cherry-pick-87270496-make-lexrestore-more-signal-safe
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/zsh.git
More information about the Pkg-zsh-commits
mailing list