1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-07-15 18:11:25 +02:00

41828, 41830: skip SHFILEEXPANSION for new nodes added by stringsubst() in prefork()

This commit is contained in:
Barton E. Schaefer 2017-10-08 18:08:09 -07:00
parent 82c26793e4
commit b84d69cf52
3 changed files with 36 additions and 2 deletions

View file

@ -1,3 +1,10 @@
2017-10-08 Barton E. Schaefer <schaefer@zsh.org>
* 41830: Test/E01options.ztst: test for 41828.
* 41828: Src/subst.c: skip SHFILEEXPANSION for new nodes added
by stringsubst() in prefork().
2017-10-07 Oliver Kiddle <opk@zsh.org>
* 41827: Completion/Zsh/Context/_brace_parameter: correct

View file

@ -106,15 +106,20 @@ prefork(LinkList list, int flags, int *ret_flags)
ret_flags = &ret_flags_local; /* will be discarded */
queue_signals();
for (node = firstnode(list); node; incnode(node)) {
node = firstnode(list);
while (node) {
LinkNode nextnode = 0;
if ((flags & (PREFORK_SINGLE|PREFORK_ASSIGN)) == PREFORK_ASSIGN &&
(insnode = keyvalpairelement(list, node))) {
node = insnode;
incnode(node);
*ret_flags |= PREFORK_KEY_VALUE;
continue;
}
if (errflag)
if (errflag) {
unqueue_signals();
return;
}
if (isset(SHFILEEXPANSION)) {
/*
* Here and below we avoid taking the address
@ -132,6 +137,12 @@ prefork(LinkList list, int flags, int *ret_flags)
* testing if cptr changed...
*/
setdata(node, cptr);
/*
* Advance now because we must not expand filenames again
* after string substitution (which may insert new nodes).
*/
nextnode = node;
incnode(nextnode);
}
if (!(node = stringsubst(list, node,
flags & ~(PREFORK_TYPESET|PREFORK_ASSIGN),
@ -139,6 +150,10 @@ prefork(LinkList list, int flags, int *ret_flags)
unqueue_signals();
return;
}
if (isset(SHFILEEXPANSION))
node = nextnode;
else
incnode(node);
}
for (node = firstnode(list); node; incnode(node)) {
if (node == stop)

View file

@ -1026,6 +1026,18 @@
>$lspath $lspath =
>$lspath
() {
emulate -L sh
v='~/one ~/two'
print -l -- $v $v
}
0:SH_FILE_EXPANSION option with GLOB_SUBST et al.
F:Regression test for workers/41811
>~/one
>~/two
>~/one
>~/two
testpat() {
if [[ $1 = ${~2} ]]; then print $1 $2 yes; else print $1 $2 no; fi
}