glob() (and internal funcs) never checks GLOB_ERR unless an error handler pointer is passed. Even with a handler, GLOB_ERR is only partially implemented, and conditions which should activate the semantic do not. Finally, conditions which should not activate the semantic do, rendering GLOB_ERR far less useful than it should be (a TODO identifying this problem was in the source tree, and I implemented the fix). Fix: The following context diff was pasted from emacs - tabs are intact. How-To-Repeat: Do that math :-P glob("/secretdir/*",GLOB_ERR,0,&globbuf) where /secretdir is not accessible - should result in negative return value, but does not.
State Changed From-To: open->feedback Does this problem still occur in newer versions of FreeBSD, such as 4.3-RELEASE?
On Sat, Jul 21, 2001 at 10:47:04PM -0400, Daniel Pouzzner wrote: > >Does this problem still occur in newer versions of FreeBSD, > >such as 4.3-RELEASE? > > I submitted that bug report so long I don't even remember what I was > working on that had me using the glob routines. I do remember > submitting the bug report at least. > > Can you send me a URL where I can read my bug report for a refresher? Hmm, the URL should have been at the bottom of the message Gnats sent you. Anyway, here it is: http://www.FreeBSD.org/cgi/query-pr.cgi?pr=18704 Best regards, Mike Barcroft
State Changed From-To: feedback->suspended This is still a problem. Awaiting committer.
Adding to Audit-Trail. On Sat, Jul 21, 2001 at 11:17:42PM -0400, Daniel Pouzzner wrote: > I just checked the 4.3 code (Mar 28 modtime on glob.c) and no repair > has been implemented (notably, my suggested repair has not been > merged). > > Synopsis: GLOB_ERR not handled correctly by glob() > > State-Changed-From-To: open->feedback > State-Changed-By: mike > State-Changed-When: Sat Jul 21 19:40:12 PDT 2001 > State-Changed-Why: > > Does this problem still occur in newer versions of FreeBSD, > such as 4.3-RELEASE? > > http://www.FreeBSD.org/cgi/query-pr.cgi?pr=18704
For bugs matching the following conditions: - Status == In Progress - Assignee == "bugs@FreeBSD.org" - Last Modified Year <= 2017 Do - Set Status to "Open"
This patch no longer applies and is incomplete. It looks like it could be applied carefully by hand, but would then need some additional work to handle more cases.
So this bug has been fixed by other ways. The following works: #include <err.h> #include <glob.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { glob_t globbuf; if (glob("/secretdir/*",GLOB_ERR,0,&globbuf) == 0) errx(1, "FAILED"); printf("SUCCESS"); exit(0); }