Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!bbn!mit-eddie!uw-beaver!sumax!quick!srg From: srg@quick.COM (Spencer Garrett) Newsgroups: gnu.bash.bug Subject: Re: globbing bug Message-ID: <5199@quick.COM> Date: 7 Sep 89 18:16:48 GMT References: <8909040114.AA21411@comp.vuw.ac.nz> Distribution: gnu Organization: Quicksilver Engineering, Seattle Lines: 18 In article <8909040114.AA21411@comp.vuw.ac.nz>, nickson@comp.vuw.ac.nz (Ray Nickson) writes: -> The problem is (not surprisingly) in the glob_match function in -> glob.c; when matching against *, we try to see how much of -> our text matches, and make * match enough to make this -> work. So, we first attempt to match [^C] to BC; this fails because -> [^C] must match exactly one character. Matching [^C] to C fails, -> because it cannot match a C. But then, we try to match [^C] against -> the null string; the code as written will test the first character of -> the null string ('\0') against each element of the set (i.e. C); it -> won't match, so we claim that "" matches [^C]. -> -> The easiest solution is probably to special-case the null string in -> text being matched against a set, as we do when matching against ?. Argh! The code should remember where the end of the string is, and not try to special case some magic character. The comparison should always fail if you're at the end of the string, but not at the end of the pattern.