Date: Tuesday, March 21, 2017 @ 09:43:20 Author: bpiotrowski Revision: 291144
upgpkg: zsh 5.3.1-2 backport patch that fixes history-incremental-pattern-search-backward Added: zsh/trunk/40285.patch Modified: zsh/trunk/PKGBUILD -------------+ 40285.patch | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ PKGBUILD | 9 +++++-- 2 files changed, 72 insertions(+), 3 deletions(-) Added: 40285.patch =================================================================== --- 40285.patch (rev 0) +++ 40285.patch 2017-03-21 09:43:20 UTC (rev 291144) @@ -0,0 +1,66 @@ +From 48cadf48ff9c61ce09e826ad9a58e250e999a262 Mon Sep 17 00:00:00 2001 +From: Peter Stephenson <[email protected]> +Date: Fri, 6 Jan 2017 17:42:13 +0000 +Subject: [PATCH] 40285: Be more careful with pattern allocation in history + isearch. + +If there are ZLE hooks to be called, they may use patterns, in +which case it's not safe to allocate the isearch pattern in the +static buffer. +--- + Src/Zle/zle_hist.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c +index abd6e17..434735d 100644 +--- a/Src/Zle/zle_hist.c ++++ b/Src/Zle/zle_hist.c +@@ -1220,13 +1220,12 @@ doisearch(char **args, int dir, int pattern) + char *patbuf = ztrdup(sbuf); + char *patstring; + /* +- * Use static pattern buffer since we don't need +- * to maintain it and won't call other pattern functions +- * meanwhile. ++ * Do not use static pattern buffer (PAT_STATIC) since we call zle hooks, ++ * which might call other pattern functions. Use PAT_ZDUP instead. + * Use PAT_NOANCH because we don't need the match + * anchored to the end, even if it is at the start. + */ +- int patflags = PAT_STATIC|PAT_NOANCH; ++ int patflags = PAT_ZDUP|PAT_NOANCH; + if (sbuf[0] == '^') { + /* + * We'll handle the anchor later when +@@ -1521,6 +1520,7 @@ doisearch(char **args, int dir, int pattern) + if (only_one || !top_spot || old_sbptr != sbptr) + break; + } ++ freepatprog(patprog); + patprog = NULL; + nosearch = 1; + skip_pos = 0; +@@ -1632,6 +1632,7 @@ doisearch(char **args, int dir, int pattern) + } + strcpy(sbuf + sbptr, paste); + sbptr += pastelen; ++ freepatprog(patprog); + patprog = NULL; + free(paste); + } else if (cmd == Th(z_acceptsearch)) { +@@ -1682,6 +1683,7 @@ doisearch(char **args, int dir, int pattern) + * always valid at this point. + */ + sbptr += zlecharasstring(LASTFULLCHAR, sbuf + sbptr); ++ freepatprog(patprog); + patprog = NULL; + } + if (feep) +@@ -1702,6 +1704,7 @@ doisearch(char **args, int dir, int pattern) + zsfree(okeymap); + if (matchlist) + freematchlist(matchlist); ++ freepatprog(patprog); + isearch_active = 0; + /* + * Don't allow unused characters provided as a string to the Modified: PKGBUILD =================================================================== --- PKGBUILD 2017-03-21 07:49:31 UTC (rev 291143) +++ PKGBUILD 2017-03-21 09:43:20 UTC (rev 291144) @@ -4,22 +4,25 @@ pkgbase=zsh pkgname=('zsh' 'zsh-doc') pkgver=5.3.1 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url='http://www.zsh.org/' license=('custom') makedepends=('pcre' 'libcap' 'gdbm') source=("https://www.zsh.org/pub/zsh-${pkgver}"{,-doc}".tar.xz"{,.asc} - 'zprofile') + 'zprofile' + '40285.patch') md5sums=('67d3e5ed99de68340c16aef613b0ecf7' 'SKIP' '6b908409528e77e00a26b7283f1f425d' 'SKIP' - '24a9335edf77252a7b5f52e079f7aef7') + '24a9335edf77252a7b5f52e079f7aef7' + 'fed5d393aa5b6ea51e873fa0605796ac') validpgpkeys=('F7B2754C7DE2830914661F0EA71D9A9D4BDB27B3') prepare() { cd "${srcdir}/${pkgbase}-${pkgver}" + patch -p1 -i "${srcdir}/40285.patch" # Set correct keymap path sed -i 's#/usr/share/keymaps#/usr/share/kbd/keymaps#g' Completion/Unix/Command/_loadkeys
