In glob0() the iterator is used to walk over an array of Char's. Char is defined as uint_fast64_t (64 bits) while the iterator is type int (32 bits). The side effect of this type conversion is the high bits which were used to indicate if a special character was a literal or special were dropped. As a result, all special character were treated as special, even if they were supposed to be literals. --- lib/libc/gen/glob.c 2010-04-18 21:35:34.772557000 -0700 +++ lib/libc/gen/glob.c.new 2010-04-18 21:30:58.634197000 -0700 @@ -433,9 +433,9 @@ glob0(const Char *pattern, glob_t *pglob, size_t *limit) { const Char *qpatnext; - int c, err; + int err; size_t oldpathc; - Char *bufnext, patbuf[MAXPATHLEN]; + Char *bufnext, c, patbuf[MAXPATHLEN]; qpatnext = globtilde(pattern, patbuf, MAXPATHLEN, pglob); oldpathc = pglob->gl_pathc;