aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2003-12-03 10:54:50 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2003-12-03 10:54:50 +0000
commit4ba52447aaf86efc5ef906e200f466935c194705 (patch)
tree789fd2ea1a87eb9738f7bdcfe22e9a3a9f24d092
parent184fd22fd4b127ed2636cd871a0f71466f322bc8 (diff)
downloadzsh-4ba52447aaf86efc5ef906e200f466935c194705.tar.gz
zsh-4ba52447aaf86efc5ef906e200f466935c194705.tar.xz
zsh-4ba52447aaf86efc5ef906e200f466935c194705.zip
19269: 8-bit characters in character classes
-rw-r--r--ChangeLog6
-rwxr-xr-xMisc/globtests13
-rw-r--r--Src/pattern.c2
-rw-r--r--Test/D02glob.ztst268
4 files changed, 288 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e249de46..8c5c30f1e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2003-12-03 Peter Stephenson <pws@csr.com>
+
+ * 19269: Src/pattern.c, Misc/globtests, Test/D02glob.ztst:
+ 8-bit characters didn't work in character classes where
+ chars were signed.
+
2003-11-19 Clint Adams <clint@zsh.org>
* 19258: Doc/Zsh/mod_terminfo.yo, Src/Modules/terminfo.c:
diff --git a/Misc/globtests b/Misc/globtests
index a0f8184ec..2306000bf 100755
--- a/Misc/globtests
+++ b/Misc/globtests
@@ -167,5 +167,18 @@ t aaaXbaabY (#a1)(a##b)##Y
f read.me (#ia1)README~READ.ME
t read.me (#ia1)README~READ_ME
f read.me (#ia1)README~(#a1)READ_ME
+t test *((#s)|/)test((#e)|/)*
+t test/path *((#s)|/)test((#e)|/)*
+t path/test *((#s)|/)test((#e)|/)*
+t path/test/ohyes *((#s)|/)test((#e)|/)*
+f atest *((#s)|/)test((#e)|/)*
+f testy *((#s)|/)test((#e)|/)*
+f testy/path *((#s)|/)test((#e)|/)*
+f path/atest *((#s)|/)test((#e)|/)*
+f atest/path *((#s)|/)test((#e)|/)*
+f path/testy *((#s)|/)test((#e)|/)*
+f path/testy/ohyes *((#s)|/)test((#e)|/)*
+f path/atest/ohyes *((#s)|/)test((#e)|/)*
+t bjrn *[]*
EOT
print "$failed tests failed."
diff --git a/Src/pattern.c b/Src/pattern.c
index be9f3b568..c3456cdaf 100644
--- a/Src/pattern.c
+++ b/Src/pattern.c
@@ -2244,7 +2244,7 @@ patmatchrange(char *range, int ch)
DPUTS(1, "BUG: unknown metacharacter in range.");
break;
}
- } else if (*range == ch)
+ } else if (STOUC(*range) == ch)
return 1;
}
return 0;
diff --git a/Test/D02glob.ztst b/Test/D02glob.ztst
new file mode 100644
index 000000000..c1c29b429
--- /dev/null
+++ b/Test/D02glob.ztst
@@ -0,0 +1,268 @@
+# Tests for globbing
+
+%prep
+ mkdir glob.tmp
+ mkdir glob.tmp/dir1
+ mkdir glob.tmp/dir2
+ : >glob.tmp/{,{dir1,dir2}/}{a,b,c}
+
+ globtest () { $ZTST_testdir/../Src/zsh -f $ZTST_srcdir/../Misc/$1 }
+
+ regress_absolute_path_and_core_dump() {
+ local absolute_dir=$(cd glob.tmp && pwd -P)
+ [[ -n $absolute_dir ]] || return 1
+ setopt localoptions extendedglob nullglob
+ print $absolute_dir/**/*~/*
+ setopt nonullglob nomatch
+ print glob.tmp/**/*~(.)#
+ }
+
+%test
+
+ globtest globtests
+0:zsh globbing
+>0: [[ foo~ = foo~ ]]
+>0: [[ foo~ = (foo~) ]]
+>0: [[ foo~ = (foo~|) ]]
+>0: [[ foo.c = *.c~boo* ]]
+>1: [[ foo.c = *.c~boo*~foo* ]]
+>0: [[ fofo = (fo#)# ]]
+>0: [[ ffo = (fo#)# ]]
+>0: [[ foooofo = (fo#)# ]]
+>0: [[ foooofof = (fo#)# ]]
+>0: [[ fooofoofofooo = (fo#)# ]]
+>1: [[ foooofof = (fo##)# ]]
+>1: [[ xfoooofof = (fo#)# ]]
+>1: [[ foooofofx = (fo#)# ]]
+>0: [[ ofxoofxo = ((ofo#x)#o)# ]]
+>1: [[ ofooofoofofooo = (fo#)# ]]
+>0: [[ foooxfooxfoxfooox = (fo#x)# ]]
+>1: [[ foooxfooxofoxfooox = (fo#x)# ]]
+>0: [[ foooxfooxfxfooox = (fo#x)# ]]
+>0: [[ ofxoofxo = ((ofo#x)#o)# ]]
+>0: [[ ofoooxoofxo = ((ofo#x)#o)# ]]
+>0: [[ ofoooxoofxoofoooxoofxo = ((ofo#x)#o)# ]]
+>0: [[ ofoooxoofxoofoooxoofxoo = ((ofo#x)#o)# ]]
+>1: [[ ofoooxoofxoofoooxoofxofo = ((ofo#x)#o)# ]]
+>0: [[ ofoooxoofxoofoooxoofxooofxofxo = ((ofo#x)#o)# ]]
+>0: [[ aac = ((a))#a(c) ]]
+>0: [[ ac = ((a))#a(c) ]]
+>1: [[ c = ((a))#a(c) ]]
+>0: [[ aaac = ((a))#a(c) ]]
+>1: [[ baaac = ((a))#a(c) ]]
+>0: [[ abcd = ?(a|b)c#d ]]
+>0: [[ abcd = (ab|ab#)c#d ]]
+>0: [[ acd = (ab|ab#)c#d ]]
+>0: [[ abbcd = (ab|ab#)c#d ]]
+>0: [[ effgz = (bc##d|ef#g?|(h|)i(j|k)) ]]
+>0: [[ efgz = (bc##d|ef#g?|(h|)i(j|k)) ]]
+>0: [[ egz = (bc##d|ef#g?|(h|)i(j|k)) ]]
+>0: [[ egzefffgzbcdij = (bc##d|ef#g?|(h|)i(j|k))# ]]
+>1: [[ egz = (bc##d|ef##g?|(h|)i(j|k)) ]]
+>0: [[ ofoofo = (ofo##)# ]]
+>0: [[ oxfoxoxfox = (oxf(ox)##)# ]]
+>1: [[ oxfoxfox = (oxf(ox)##)# ]]
+>0: [[ ofoofo = (ofo##|f)# ]]
+>0: [[ foofoofo = (foo|f|fo)(f|ofo##)# ]]
+>0: [[ oofooofo = (of|oofo##)# ]]
+>0: [[ fffooofoooooffoofffooofff = (f#o#)# ]]
+>1: [[ fffooofoooooffoofffooofffx = (f#o#)# ]]
+>0: [[ fofoofoofofoo = (fo|foo)# ]]
+>0: [[ foo = ((^x)) ]]
+>0: [[ foo = ((^x)*) ]]
+>1: [[ foo = ((^foo)) ]]
+>0: [[ foo = ((^foo)*) ]]
+>0: [[ foobar = ((^foo)) ]]
+>0: [[ foobar = ((^foo)*) ]]
+>1: [[ foot = z*~*x ]]
+>0: [[ zoot = z*~*x ]]
+>1: [[ foox = z*~*x ]]
+>1: [[ zoox = z*~*x ]]
+>0: [[ moo.cow = (*~*.*).(*~*.*) ]]
+>1: [[ mad.moo.cow = (*~*.*).(*~*.*) ]]
+>0: [[ moo.cow = (^*.*).(^*.*) ]]
+>1: [[ sane.moo.cow = (^*.*).(^*.*) ]]
+>1: [[ mucca.pazza = mu(^c#)?.pa(^z#)? ]]
+>1: [[ _foo~ = _(|*[^~]) ]]
+>0: [[ fff = ((^f)) ]]
+>0: [[ fff = ((^f)#) ]]
+>0: [[ fff = ((^f)##) ]]
+>0: [[ ooo = ((^f)) ]]
+>0: [[ ooo = ((^f)#) ]]
+>0: [[ ooo = ((^f)##) ]]
+>0: [[ foo = ((^f)) ]]
+>0: [[ foo = ((^f)#) ]]
+>0: [[ foo = ((^f)##) ]]
+>1: [[ f = ((^f)) ]]
+>1: [[ f = ((^f)#) ]]
+>1: [[ f = ((^f)##) ]]
+>0: [[ foot = (^z*|*x) ]]
+>1: [[ zoot = (^z*|*x) ]]
+>0: [[ foox = (^z*|*x) ]]
+>0: [[ zoox = (^z*|*x) ]]
+>0: [[ foo = (^foo)# ]]
+>1: [[ foob = (^foo)b* ]]
+>0: [[ foobb = (^foo)b* ]]
+>1: [[ foob = (*~foo)b* ]]
+>0: [[ foobb = (*~foo)b* ]]
+>1: [[ zsh = ^z* ]]
+>0: [[ a%1X = [[:alpha:][:punct:]]#[[:digit:]][^[:lower:]] ]]
+>1: [[ a%1 = [[:alpha:][:punct:]]#[[:digit:]][^[:lower:]] ]]
+>0: [[ [: = [[:]# ]]
+>0: [[ :] = []:]# ]]
+>0: [[ :] = [:]]# ]]
+>0: [[ [ = [[] ]]
+>0: [[ ] = []] ]]
+>0: [[ [] = [^]]] ]]
+>0: [[ fooxx = (#i)FOOXX ]]
+>1: [[ fooxx = (#l)FOOXX ]]
+>0: [[ FOOXX = (#l)fooxx ]]
+>1: [[ fooxx = (#i)FOO(#I)X(#i)X ]]
+>0: [[ fooXx = (#i)FOO(#I)X(#i)X ]]
+>0: [[ fooxx = ((#i)FOOX)x ]]
+>1: [[ fooxx = ((#i)FOOX)X ]]
+>1: [[ BAR = (bar|(#i)foo) ]]
+>0: [[ FOO = (bar|(#i)foo) ]]
+>0: [[ Modules = (#i)*m* ]]
+>0: [[ fooGRUD = (#i)(bar|(#I)foo|(#i)rod)grud ]]
+>1: [[ FOOGRUD = (#i)(bar|(#I)foo|(#i)rod)grud ]]
+>0: [[ readme = (#i)readme~README|readme ]]
+>0: [[ readme = (#i)readme~README|readme~README ]]
+>0: [[ 633 = <1-1000>33 ]]
+>0: [[ 633 = <-1000>33 ]]
+>0: [[ 633 = <1->33 ]]
+>0: [[ 633 = <->33 ]]
+>0: [[ READ.ME = (#ia1)readme ]]
+>1: [[ READ..ME = (#ia1)readme ]]
+>0: [[ README = (#ia1)readm ]]
+>0: [[ READM = (#ia1)readme ]]
+>0: [[ README = (#ia1)eadme ]]
+>0: [[ EADME = (#ia1)readme ]]
+>0: [[ READEM = (#ia1)readme ]]
+>1: [[ ADME = (#ia1)readme ]]
+>1: [[ README = (#ia1)read ]]
+>0: [[ bob = (#a1)[b][b] ]]
+>1: [[ bob = (#a1)[b][b]a ]]
+>0: [[ bob = (#a1)[b]o[b]a ]]
+>1: [[ bob = (#a1)[c]o[b] ]]
+>0: [[ abcd = (#a2)XbcX ]]
+>0: [[ abcd = (#a2)ad ]]
+>0: [[ ad = (#a2)abcd ]]
+>0: [[ abcd = (#a2)bd ]]
+>0: [[ bd = (#a2)abcd ]]
+>0: [[ badc = (#a2)abcd ]]
+>0: [[ adbc = (#a2)abcd ]]
+>1: [[ dcba = (#a2)abcd ]]
+>0: [[ dcba = (#a3)abcd ]]
+>0: [[ aabaXaaabY = (#a1)(a#b)#Y ]]
+>0: [[ aabaXaaabY = (#a1)(a#b)(a#b)Y ]]
+>0: [[ aaXaaaaabY = (#a1)(a#b)(a#b)Y ]]
+>0: [[ aaaXaaabY = (#a1)(a##b)##Y ]]
+>0: [[ aaaXbaabY = (#a1)(a##b)##Y ]]
+>1: [[ read.me = (#ia1)README~READ.ME ]]
+>0: [[ read.me = (#ia1)README~READ_ME ]]
+>1: [[ read.me = (#ia1)README~(#a1)READ_ME ]]
+>0: [[ test = *((#s)|/)test((#e)|/)* ]]
+>0: [[ test/path = *((#s)|/)test((#e)|/)* ]]
+>0: [[ path/test = *((#s)|/)test((#e)|/)* ]]
+>0: [[ path/test/ohyes = *((#s)|/)test((#e)|/)* ]]
+>1: [[ atest = *((#s)|/)test((#e)|/)* ]]
+>1: [[ testy = *((#s)|/)test((#e)|/)* ]]
+>1: [[ testy/path = *((#s)|/)test((#e)|/)* ]]
+>1: [[ path/atest = *((#s)|/)test((#e)|/)* ]]
+>1: [[ atest/path = *((#s)|/)test((#e)|/)* ]]
+>1: [[ path/testy = *((#s)|/)test((#e)|/)* ]]
+>1: [[ path/testy/ohyes = *((#s)|/)test((#e)|/)* ]]
+>1: [[ path/atest/ohyes = *((#s)|/)test((#e)|/)* ]]
+>0: [[ bjrn = *[]* ]]
+>0 tests failed.
+
+ globtest globtests.ksh
+0:ksh compatibility
+>0: [[ fofo = *(f*(o)) ]]
+>0: [[ ffo = *(f*(o)) ]]
+>0: [[ foooofo = *(f*(o)) ]]
+>0: [[ foooofof = *(f*(o)) ]]
+>0: [[ fooofoofofooo = *(f*(o)) ]]
+>1: [[ foooofof = *(f+(o)) ]]
+>1: [[ xfoooofof = *(f*(o)) ]]
+>1: [[ foooofofx = *(f*(o)) ]]
+>0: [[ ofxoofxo = *(*(of*(o)x)o) ]]
+>1: [[ ofooofoofofooo = *(f*(o)) ]]
+>0: [[ foooxfooxfoxfooox = *(f*(o)x) ]]
+>1: [[ foooxfooxofoxfooox = *(f*(o)x) ]]
+>0: [[ foooxfooxfxfooox = *(f*(o)x) ]]
+>0: [[ ofxoofxo = *(*(of*(o)x)o) ]]
+>0: [[ ofoooxoofxo = *(*(of*(o)x)o) ]]
+>0: [[ ofoooxoofxoofoooxoofxo = *(*(of*(o)x)o) ]]
+>0: [[ ofoooxoofxoofoooxoofxoo = *(*(of*(o)x)o) ]]
+>1: [[ ofoooxoofxoofoooxoofxofo = *(*(of*(o)x)o) ]]
+>0: [[ ofoooxoofxoofoooxoofxooofxofxo = *(*(of*(o)x)o) ]]
+>0: [[ aac = *(@(a))a@(c) ]]
+>0: [[ ac = *(@(a))a@(c) ]]
+>1: [[ c = *(@(a))a@(c) ]]
+>0: [[ aaac = *(@(a))a@(c) ]]
+>1: [[ baaac = *(@(a))a@(c) ]]
+>0: [[ abcd = ?@(a|b)*@(c)d ]]
+>0: [[ abcd = @(ab|a*@(b))*(c)d ]]
+>0: [[ acd = @(ab|a*(b))*(c)d ]]
+>0: [[ abbcd = @(ab|a*(b))*(c)d ]]
+>0: [[ effgz = @(b+(c)d|e*(f)g?|?(h)i@(j|k)) ]]
+>0: [[ efgz = @(b+(c)d|e*(f)g?|?(h)i@(j|k)) ]]
+>0: [[ egz = @(b+(c)d|e*(f)g?|?(h)i@(j|k)) ]]
+>0: [[ egzefffgzbcdij = *(b+(c)d|e*(f)g?|?(h)i@(j|k)) ]]
+>1: [[ egz = @(b+(c)d|e+(f)g?|?(h)i@(j|k)) ]]
+>0: [[ ofoofo = *(of+(o)) ]]
+>0: [[ oxfoxoxfox = *(oxf+(ox)) ]]
+>1: [[ oxfoxfox = *(oxf+(ox)) ]]
+>0: [[ ofoofo = *(of+(o)|f) ]]
+>0: [[ foofoofo = @(foo|f|fo)*(f|of+(o)) ]]
+>0: [[ oofooofo = *(of|oof+(o)) ]]
+>0: [[ fffooofoooooffoofffooofff = *(*(f)*(o)) ]]
+>1: [[ fffooofoooooffoofffooofffx = *(*(f)*(o)) ]]
+>0: [[ fofoofoofofoo = *(fo|foo) ]]
+>0: [[ foo = !(x) ]]
+>0: [[ foo = !(x)* ]]
+>1: [[ foo = !(foo) ]]
+>0: [[ foo = !(foo)* ]]
+>0: [[ foobar = !(foo) ]]
+>0: [[ foobar = !(foo)* ]]
+>0: [[ moo.cow = !(*.*).!(*.*) ]]
+>1: [[ mad.moo.cow = !(*.*).!(*.*) ]]
+>1: [[ mucca.pazza = mu!(*(c))?.pa!(*(z))? ]]
+>1: [[ _foo~ = _?(*[^~]) ]]
+>0: [[ fff = !(f) ]]
+>0: [[ fff = *(!(f)) ]]
+>0: [[ fff = +(!(f)) ]]
+>0: [[ ooo = !(f) ]]
+>0: [[ ooo = *(!(f)) ]]
+>0: [[ ooo = +(!(f)) ]]
+>0: [[ foo = !(f) ]]
+>0: [[ foo = *(!(f)) ]]
+>0: [[ foo = +(!(f)) ]]
+>1: [[ f = !(f) ]]
+>1: [[ f = *(!(f)) ]]
+>1: [[ f = +(!(f)) ]]
+>0: [[ foot = @(!(z*)|*x) ]]
+>1: [[ zoot = @(!(z*)|*x) ]]
+>0: [[ foox = @(!(z*)|*x) ]]
+>0: [[ zoox = @(!(z*)|*x) ]]
+>0: [[ foo = *(!(foo)) ]]
+>1: [[ foob = !(foo)b* ]]
+>0: [[ foobb = !(foo)b* ]]
+>0: [[ fooxx = (#i)FOOXX ]]
+>1: [[ fooxx = (#l)FOOXX ]]
+>0: [[ FOOXX = (#l)fooxx ]]
+>1: [[ fooxx = (#i)FOO@(#I)X@(#i)X ]]
+>0: [[ fooXx = (#i)FOO@(#I)X@(#i)X ]]
+>0: [[ fooxx = @((#i)FOOX)x ]]
+>1: [[ fooxx = @((#i)FOOX)X ]]
+>1: [[ BAR = @(bar|(#i)foo) ]]
+>0: [[ FOO = @(bar|(#i)foo) ]]
+>0: [[ Modules = (#i)*m* ]]
+>0 tests failed.
+
+ ( regress_absolute_path_and_core_dump )
+0:exclusions regression test
+>
+>glob.tmp/a glob.tmp/b glob.tmp/c glob.tmp/dir1 glob.tmp/dir1/a glob.tmp/dir1/b glob.tmp/dir1/c glob.tmp/dir2 glob.tmp/dir2/a glob.tmp/dir2/b glob.tmp/dir2/c