From: Daniel Stenberg Date: Mon, 28 Jun 2010 22:17:38 +0000 (+0200) Subject: glob: backslash escaping bug X-Git-Tag: curl-7_21_1~109 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=89924a897d1cdb76750459a07e6caf460601c822;p=thirdparty%2Fcurl.git glob: backslash escaping bug curl didn't properly handle escaping characters in a URL with the use of backslash. It did an attempt, but that failed as reported in bug 3022551. The described example was using the URL "http://example.com?{AB,C\,D}". I've now removed the special-handling of letters following the backslash and I also removed the bad extra check that triggered this particular bug. Bug: http://curl.haxx.se/bug/view.cgi?id=3022551 Reported by: Jon Sargeant --- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 30fcb466a2..05e02c9a84 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -20,6 +20,7 @@ This release includes the following bugfixes: o ftp-wildcard: avoid tight loop when used without any pattern o multi_socket: re-use of same socket without notifying app o ftp wildcard: FTP LIST parser FIX + o urlglobbing backslash escaping bug This release includes the following known bugs: @@ -29,6 +30,7 @@ This release would not have looked like this without help, code, reports and advice from friends like these: Dan Fandrich, Kamil Dudka, Krister Johansen, Pavel Raiskup, + Jon Sargeant Thanks! (and sorry if I forgot to mention someone) diff --git a/src/urlglob.c b/src/urlglob.c index 5f8fb28682..8435b250d4 100644 --- a/src/urlglob.c +++ b/src/urlglob.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2009, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2010, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -75,8 +75,6 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, ++glob->size; while (!done) { - bool skip; - switch (*pattern) { case '\0': /* URL ended while set was still open */ snprintf(glob->errormsg, sizeof(glob->errormsg), @@ -127,24 +125,7 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, return GLOB_ERROR; case '\\': /* escaped character, skip '\' */ - switch(pattern[1]) { - case '[': - case ']': - case '{': - case '}': - case ',': - skip = TRUE; - break; - default: - skip = FALSE; - break; - } - if(skip) { - if (*(buf+1) == '\0') { /* but no escaping of '\0'! */ - snprintf(glob->errormsg, sizeof(glob->errormsg), - "illegal pattern at pos %zu\n", pos); - return GLOB_ERROR; - } + if(pattern[1]) { ++pattern; ++pos; }