[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