1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-18 21:14:11 +01:00

20522: must-match optimisation in parameter substitution broken

This commit is contained in:
Peter Stephenson 2004-10-26 17:20:21 +00:00
parent ced347cf3a
commit c8e70ab5cf
3 changed files with 24 additions and 2 deletions

@ -1,3 +1,8 @@
2004-10-26 Peter Stephenson <pws@csr.com>
* 20522: Src/glob.c, Test/D02glob.ztst: must-match optimisation
was broken for pattern substitutions in parameters.
2004-10-22 Wayne Davison <wayned@users.sourceforge.net>
* 20510: Borzenkov Andrey: Src/jobs.c: Fixed the arg to a call

@ -2206,8 +2206,20 @@ igetmatch(char **sp, Patprog p, int fl, int n, char *replstr)
repllist = NULL;
/* perform must-match test for complex closures */
if (p->mustoff && !strstr((char *)s, (char *)p + p->mustoff))
matched = 0;
if (p->mustoff)
{
/*
* Yuk. Probably we should rewrite this whole function to
* use an unmetafied test string.
*
* Use META_HEAPDUP because we need a terminating NULL.
*/
char *muststr = metafy((char *)p + p->mustoff,
p->patmlen, META_HEAPDUP);
if (!strstr(s, muststr))
matched = 0;
}
/* in case we used the prog before... */
p->flags &= ~(PAT_NOTSTART|PAT_NOTEND);

@ -312,3 +312,8 @@
[[ "" = "" ]] && echo OK
0:Empty strings
>OK
foo="this string has a : colon in it"
print ${foo%% #:*}
0:Must-match arguments in complex patterns
>this string has a