From d8246077df3083b3b817881776061d0d0050d90b Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 28 Feb 2006 00:11:06 +0000 Subject: grab some tests from glibc --- test/misc/bug-glob1.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 test/misc/bug-glob1.c (limited to 'test/misc/bug-glob1.c') diff --git a/test/misc/bug-glob1.c b/test/misc/bug-glob1.c new file mode 100644 index 000000000..aec84ad44 --- /dev/null +++ b/test/misc/bug-glob1.c @@ -0,0 +1,94 @@ +/* Test case for globbing dangling symlink. By Ulrich Drepper. */ +#include +#include +#include +#include +#include +#include +#include + + +static void prepare (int argc, char *argv[]); +#define PREPARE prepare +static int do_test (void); +#define TEST_FUNCTION do_test () + +#include "../test-skeleton.c" + + +static char *fname; + +static void +prepare (int argc, char *argv[]) +{ + if (argc < 2) + error (EXIT_FAILURE, 0, "missing argument"); + + size_t len = strlen (argv[1]); + static const char ext[] = "globXXXXXX"; + fname = malloc (len + sizeof (ext)); + if (fname == NULL) + error (EXIT_FAILURE, errno, "cannot create temp file"); + again: + strcpy (stpcpy (fname, argv[1]), ext); + +/* + fname = mktemp (fname); +*/ + close(mkstemp(fname)); + unlink(fname); + + if (fname == NULL || *fname == '\0') + error (EXIT_FAILURE, errno, "cannot create temp file name"); + if (symlink ("bug-glob1-does-not-exist", fname) != 0) + { + if (errno == EEXIST) + goto again; + + error (EXIT_FAILURE, errno, "cannot create symlink"); + } + add_temp_file (fname); +} + + +static int +do_test (void) +{ + glob_t gl; + int retval = 0; + int e; + + e = glob (fname, 0, NULL, &gl); + if (e == 0) + { + printf ("glob(\"%s\") succeeded when it should not have\n", fname); + retval = 1; + } + globfree (&gl); + + size_t fnamelen = strlen (fname); + char buf[fnamelen + 2]; + + strcpy (buf, fname); + buf[fnamelen - 1] = '?'; + e = glob (buf, 0, NULL, &gl); + if (e == 0) + { + printf ("glob(\"%s\") succeeded when it should not have\n", buf); + retval = 1; + } + globfree (&gl); + + strcpy (buf, fname); + buf[fnamelen] = '*'; + buf[fnamelen + 1] = '\0'; + e = glob (buf, 0, NULL, &gl); + if (e == 0) + { + printf ("glob(\"%s\") succeeded when it should not have\n", buf); + retval = 1; + } + globfree (&gl); + + return retval; +} -- cgit v1.2.3