25969: two bugs with metafication plus a test for one

This commit is contained in:
Peter Stephenson 2008-10-30 15:34:18 +00:00
parent 176e0dc821
commit 25833cc89e
4 changed files with 20 additions and 5 deletions

View file

@ -1,5 +1,9 @@
2008-10-30 Peter Stephenson <pws@csr.com>
* 25969: Src/subst.c, Src/utils.c, Test/D07multibyte.ztst:
bugs in metafication with prompt expansion called from parameter
expansion and with zsh_directory_name when called from finddir().
* 25963: Src/utils.c: Interrupt at spell check prompt output
garbage.

View file

@ -2738,8 +2738,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
char *tmps;
unmetafy(*ap, &len);
untokenize(*ap);
tmps = unmetafy(promptexpand(metafy(*ap, len, META_NOALLOC),
0, NULL, NULL, NULL), &len);
tmps = promptexpand(metafy(*ap, len, META_NOALLOC),
0, NULL, NULL, NULL);
*ap = dupstring(tmps);
free(tmps);
}
@ -2749,8 +2749,8 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub)
val = dupstring(val), copied = 1;
unmetafy(val, &len);
untokenize(val);
tmps = unmetafy(promptexpand(metafy(val, len, META_NOALLOC),
0, NULL, NULL, NULL), &len);
tmps = promptexpand(metafy(val, len, META_NOALLOC),
0, NULL, NULL, NULL);
val = dupstring(tmps);
free(tmps);
}

View file

@ -857,7 +857,9 @@ finddir(char *s)
scanhashtable(nameddirtab, 0, 0, 0, finddir_scan, 0);
if (func) {
char **ares = subst_string_by_func(func, "d", finddir_full);
char *dir_meta = metafy(finddir_full, strlen(finddir_full),
META_ALLOC);
char **ares = subst_string_by_func(func, "d", dir_meta);
int len;
if (ares && arrlen(ares) >= 2 &&
(len = (int)zstrtol(ares[1], NULL, 10)) > finddir_best) {
@ -868,6 +870,8 @@ finddir(char *s)
finddir_last->diff = len - strlen(finddir_last->node.nam);
finddir_best = len;
}
if (dir_meta != finddir_full)
zsfree(dir_meta);
}
return finddir_last;

View file

@ -403,3 +403,10 @@
0:Backslashes and metafied characters in patterns
>Matched against glob/()Ą/*
>Matched against glob/()Ā/*
mkdir 梶浦由記 'Пётр Ильич Чайковский'
(cd 梶浦由記; print ${${(%):-%~}:t})
(cd 'Пётр Ильич Чайковский'; print ${${(%):-%~}:t})
0:Metafied characters in prompt expansion
>梶浦由記
>Пётр Ильич Чайковский