From d88b3d3d5d487d0f70230eb6548a843d32836ce2 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 15 Dec 2004 09:23:24 +0000 Subject: fixed how backslashes are treated in glob strings --- src/urlglob.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/urlglob.c b/src/urlglob.c index e4f441b08..64d700783 100644 --- a/src/urlglob.c +++ b/src/urlglob.c @@ -73,6 +73,8 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, ++glob->size; while (1) { + bool skip; + switch (*pattern) { case '\0': /* URL ended while set was still open */ snprintf(glob->errormsg, sizeof(glob->errormsg), @@ -122,14 +124,28 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, return GLOB_ERROR; case '\\': /* escaped character, skip '\' */ - if (*(buf+1) == '\0') { /* but no escaping of '\0'! */ - snprintf(glob->errormsg, sizeof(glob->errormsg), - "illegal pattern at pos %d\n", (int)pos); - return GLOB_ERROR; + switch(pattern[1]) { + case '[': + case ']': + case '{': + case '}': + case ',': + skip = TRUE; + break; + default: + skip = FALSE; + break; } - ++pattern; - ++pos; /* intentional fallthrough */ - + if(skip) { + if (*(buf+1) == '\0') { /* but no escaping of '\0'! */ + snprintf(glob->errormsg, sizeof(glob->errormsg), + "illegal pattern at pos %d\n", (int)pos); + return GLOB_ERROR; + } + ++pattern; + ++pos; + } + /* intentional fallthrough */ default: *buf++ = *pattern++; /* copy character to set element */ ++pos; -- cgit v1.2.3