https://issues.apache.org/bugzilla/show_bug.cgi?id=45461
Summary: GlobCompiler: * should not match the path separator '/'
Product: ORO
Version: 2.0.8
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Main
AssignedTo: [email protected]
ReportedBy: [EMAIL PROTECTED]
import org.apache.oro.text.GlobCompiler;
import org.apache.oro.text.regex.MalformedPatternException;
import org.apache.oro.text.regex.Pattern;
import org.apache.oro.text.regex.Perl5Matcher;
public class Main {
public static void main(String[] args) throws MalformedPatternException {
GlobCompiler globCompiler = new GlobCompiler();
Pattern pattern = globCompiler.compile("*.c");
Perl5Matcher perl5Matcher = new Perl5Matcher();
System.out.println(perl5Matcher.matches("foo.c", pattern));
System.out.println(perl5Matcher.matches("subdir/bar.c", pattern));
}
}
$ java -cp ... Main
true
true
Expected behavior is:
true
false
The glob man page states:
Pathnames
Globbing is applied on each of the components of a pathname separately. A '/'
in a pathname cannot be matched by a '?' or '*' wildcard, or by a range like
'[.-0]'. A range cannot contain an explicit '/' character; this would lead to a
syntax error.
If a filename starts with a '.', this character must be matched explicitly.
(Thus, 'rm *' will not remove .profile, and 'tar c *' will not archive all your
files; 'tar c .' is better.)
Writing a simple C program that uses glob confirms this:
$ cat testglob.c
#include <glob.h>
main(int argc, char *argv[]) {
glob_t globbuf;
globbuf.gl_offs = 2;
glob("*.c", GLOB_DOOFFS, 0, &globbuf);
globbuf.gl_pathv[0] = "ls";
globbuf.gl_pathv[1] = "-l";
execvp("ls", &globbuf.gl_pathv[0]);
}
$ find
.
./subdir
./subdir/bar.c
./testglob.c
./a.out
$ ./a.out
-rw-rw-r-- 1 sirianni engr 236 2008-07-22 13:36 testglob.c
--
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]