diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-07 09:38:49 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2003-05-07 09:38:49 +0000 |
commit | 4f9580ec039ef11093791cff7263dcb06614045e (patch) | |
tree | d8435ade739928e115a2cfd3c785a78228cf8fc0 | |
parent | bd6c1364dfbb1552b18271586cab5c1a41471a6a (diff) | |
download | zsh-4f9580ec039ef11093791cff7263dcb06614045e.tar.gz zsh-4f9580ec039ef11093791cff7263dcb06614045e.tar.xz zsh-4f9580ec039ef11093791cff7263dcb06614045e.zip |
18508: quoting of separator in ${foo//../..} was buggy
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Src/subst.c | 19 | ||||
-rw-r--r-- | Test/D04parameter.ztst | 12 |
3 files changed, 30 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index 4b08f5bee..0e3fe86a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-05-07 Peter Stephenson <pws@csr.com> + + * 18508: Src/subst.c, Test/D04parameter.ztst: quoting of the `/' + separating source and replacment text in ${foo//bar/stuff} was + buggy. + 2003-05-06 Peter Stephenson <pws@csr.com> * Koen van Hoo: zsh-users/6049: Src/utils.c: actually in diff --git a/Src/subst.c b/Src/subst.c index 5396cdf6c..dc5044959 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -1437,15 +1437,20 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int ssub) * If there isn't one, we're just going to delete that, * i.e. replace it with an empty string. * - * This allows quotation of the slash with '\\/'. Why - * two? Well, for a non-quoted string we can check for - * Bnull+/, which is what you get from `\/', but inside - * double quotes the Bnull isn't there, so it's not - * consistent. + * We used to use double backslashes to quote slashes, + * but actually that was buggy and using a single backslash + * is easier and more obvious. */ for (ptr = s; (c = *ptr) && c != '/'; ptr++) - if (c == '\\' && ptr[1] == '/') - chuck(ptr); + { + if ((c == Bnull || c == '\\') && ptr[1]) + { + if (ptr[1] == '/') + chuck(ptr); + else + ptr++; + } + } replstr = (*ptr && ptr[1]) ? ptr+1 : ""; *ptr = '\0'; } diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 77964a741..3327caf9d 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -146,6 +146,18 @@ 0:array ${...:/...} >expletive deleted boldly claws dogs expletive deleted fight + str1='a\string\with\backslashes' + str2='a/string/with/slashes' + print "${str1//\\/-}" + print ${str1//\\/-} + print "${str2//\//-}" + print ${str2//\//-} +0:use of backslashes in //-substitutions +>a-string-with-backslashes +>a-string-with-backslashes +>a-string-with-slashes +>a-string-with-slashes + str1='twocubed' array=(the number of protons in an oxygen nucleus) print $#str1 ${#str1} "$#str1 ${#str1}" $#array ${#array} "$#array ${#array}" |