Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 1 Dec 2013 17:06:10 -0500
From: Rich Felker <>
Subject: Re: fnmatch and FNM_CASEFOLD

On Sun, Dec 01, 2013 at 03:02:35PM +0100, Felix Janda wrote:
> Rich Felker wrote:
> > On Fri, Nov 29, 2013 at 06:34:17PM -0500, Rich Felker wrote:
> [...]
> > > I'd also like to remove FNM_LEADING_DIR, which is unsupported by musl
> > > and documented in the man page as:
> > > 
> > >     "This flag is mainly for the internal use of glibc and is
> > >     implemented only in certain cases."
> > 
> > Unfortunately, Debian codesearch is showing a lot of hits for
> > FNM_LEADING_DIR; I haven't researched whether they're hard or soft
> > dependencies, so if anyone is willing to look into that, it'd be
> > helpful. See:
> The vast majority of the matches comes from code copied from gnulib,...
> implementing fnmatch().

That makes sense. However there seem to be gnulib tests checking calls
with FNM_LEADING_DIR even though they don't seem to depend on the
behavior. Would removing FNM_LEADING_DIR from musl's fnmatch.h cause
these tests to fail and cause programs using gnulib to pull in the
(highly inefficient and broken) GNU fnmatch source?

> busybox's tar uses it if available for the -X and -T option for file
> in/exclusion.

Sadly removing FNM_LEADING_DIR from musl's headers would not fix
busybox since busybox just defines it to 0 if it's missing and then
proceeds to use it as if it worked... This is documented in the
comments as being something to fix, but I haven't seen any progress on
fixing it.

> Jane Street's core library for OCaml provides libc's version of
> fnmatch() to its users. Its implementation expects FNM_LEADING_DIR
> (and also FNM_CASE_FOLD) to exists.

What do you mean by "expects"? What goes wrong if it's missing?

> recoll will only use FNM_LEADING_DIR if it is available. However its
> documentation says it is always used.

Does lack of FNM_LEADING_DIR impact functionality?

> csync2 and dds2tar use the flag unconditionally.

I would guess these mostly work with it as a no-op (like now), only
failing to support some user-provided patterns. Is this true?

> sitecopy checks in its config script for the existance of FNM_LEADING_DIR
> and uses it if declared. It is therefore currently broken for musl and
> fixed if one removes the declaration.

While writing this email, I actually looked into how FNM_LEADING_DIR
is supposed to work, and it's a trivial one-line change to make it
work in combination with FNM_PATHNAME, so I think we should just add
that, and document that it's a no-op without FNM_PATHNAME. Can you
tell me if this would cover most real-world usage? At some later point
we might be able to add it for non-FNM_PATHNAME. I have ideas how to
do this but I'd like to combine that with an overhaul to the whole
file I have in mind for post-1.0.


Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.