diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2003-10-06 22:42:35 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2003-10-06 22:42:35 +0000 |
commit | bbc409eefece558f9b24ea6960e15c0c3468422a (patch) | |
tree | c301f84bc174daa8a1e661b243062f09919fba14 | |
parent | 530bbb503e7dc6b27fa9adb2423220293d2eed14 (diff) | |
download | zsh-bbc409eefece558f9b24ea6960e15c0c3468422a.tar.gz zsh-bbc409eefece558f9b24ea6960e15c0c3468422a.tar.xz zsh-bbc409eefece558f9b24ea6960e15c0c3468422a.zip |
19167: fix NUL at start of BRACE_CCL range.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/glob.c | 11 | ||||
-rw-r--r-- | Test/E01options.ztst | 13 |
3 files changed, 22 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index 5661a52e1..f7f8d129c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2003-10-06 Peter Stephenson <pws@pwstephenson.fsnet.co.uk> + * 19167: Src/glob.c, Test/E01options.ztst: NULL at start + of BRACE_CCL range didn't work. + * unposted: Doc/Zsh/.distfiles, Src/zsh.mdd, Src/Modules/.distfiles: update distribution files for 18980 (zsh/system) and 19053 (Functions/MIME). diff --git a/Src/glob.c b/Src/glob.c index 5f38ad188..857afc5fd 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -1867,12 +1867,13 @@ xpandbraces(LinkList list, LinkNode *np) * set of flags saying whether each character is present; * * the final list is in lexical order. */ char ccl[256], *p; - unsigned char c1, c2, lastch; + unsigned char c1, c2; unsigned int len, pl; + int lastch = -1; uremnode(list, node); memset(ccl, 0, sizeof(ccl) / sizeof(ccl[0])); - for (p = str + 1, lastch = 0; p < str2;) { + for (p = str + 1; p < str2;) { if (itok(c1 = *p++)) c1 = ztokens[c1 - STOUC(Pound)]; if ((char) c1 == Meta) @@ -1881,10 +1882,10 @@ xpandbraces(LinkList list, LinkNode *np) c2 = ztokens[c2 - STOUC(Pound)]; if ((char) c2 == Meta) c2 = 32 ^ p[1]; - if (c1 == '-' && lastch && p < str2 && (int)lastch <= (int)c2) { - while ((int)lastch < (int)c2) + if (c1 == '-' && lastch >= 0 && p < str2 && lastch <= (int)c2) { + while (lastch < (int)c2) ccl[lastch++] = 1; - lastch = 0; + lastch = -1; } else ccl[lastch = c1] = 1; } diff --git a/Test/E01options.ztst b/Test/E01options.ztst index fe0f20ef1..c73af42cb 100644 --- a/Test/E01options.ztst +++ b/Test/E01options.ztst @@ -154,6 +154,19 @@ >a b c d >{abcd} +# Don't use NUL as a field separator in the following. + setopt braceccl + print {$'\0'-$'\5'} | IFS=' ' read -A chars + for c in $chars; do print $(( #c )); done + unsetopt braceccl +0:BRACE_CCL option starting from NUL +>0 +>1 +>2 +>3 +>4 +>5 + setopt bsdecho echo "histon\nimpington" echo -e "girton\ncottenham" |