]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
glob: backslash escaping bug
authorDaniel Stenberg <daniel@haxx.se>
Mon, 28 Jun 2010 22:17:38 +0000 (00:17 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 28 Jun 2010 22:22:11 +0000 (00:22 +0200)
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

RELEASE-NOTES
src/urlglob.c

index 30fcb466a2d698f9c59563ac0262a3d2f526a133..05e02c9a84ef59e49e0f747bfb1019257fbcb685 100644 (file)
@@ -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)
index 5f8fb286828f715a0bf32b6e2cde1b57c61354bf..8435b250d45de8f3e500275e904d0c2a52710221 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, 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;
       }