Commit d88b3d3d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

fixed how backslashes are treated in glob strings

parent f2fb9039
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -7,6 +7,13 @@
                                  Changelog


Daniel (15 December 2004)
- Tom Lee found out that globbing of strings with backslashes didn't work as
  you'd expect. Backslashes are such a central part of windows file names that
  forcing backslashes to have to be escaped with backslashes is a bit too
  awkward to users. Starting now, you only need to escape globbing characters
  such as the five letters: "[]{},". Added test case 214 to verify this.

Daniel (14 December 2004)
- Harshal Pradhan patched a HTTP persistent connection flaw: if the user name
  and/or password were modified between two requests on a persistent
+2 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ This release includes the following changes:

This release includes the following bugfixes:

 o -T upload multiple files with backslashes in file names
 o modified credentials between two requests on a persistent http connection
 o large file file:// resumes on Windows
 o URLs with username and IPv6 numerical addresses
@@ -69,6 +70,6 @@ advice from friends like these:
 Tim Sneddon, Ian Gulliver, Jean-Philippe Barrette-LaPierre, Jeff Phillips,
 Wojciech Zwiefka, David Phillips, Reinout van Schouwen, Maurice Barnum,
 Richard Atterer, Rene Bernhardt, Matt Veenstra, Bryan Henderson, Ton Voon,
 Kai Sommerfeld, David Byron, Harshal Pradhan
 Kai Sommerfeld, David Byron, Harshal Pradhan, Tom Lee

        Thanks! (and sorry if I forgot to mention someone)
+23 −7
Original line number Diff line number Diff line
@@ -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 '\' */
      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 %d\n", (int)pos);
          return GLOB_ERROR;
        }
        ++pattern;
      ++pos;                            /* intentional fallthrough */

        ++pos;
      }
      /* intentional fallthrough */
    default:
      *buf++ = *pattern++;              /* copy character to set element */
      ++pos;
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
 test193 test194 test195 test196 test197 test198 test515 test516	\
 test517 test518 test210 test211 test212 test220 test221 test222	\
 test223 test224 test206 test207 test208 test209 test213 test240        \
 test241 test242 test519
 test241 test242 test519 test214

# The following tests have been removed from the dist since they no longer
# work. We need to fix the test suite's FTPS server first, then bring them

tests/data/test214

0 → 100644
+43 −0
Original line number Diff line number Diff line
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 6
Content-Type: text/html
Funny-head: yesyes

<foo>
</data>
</reply>

#
# Client-side
<client>
<server>
http
</server>
 <name>
HTTP URL with escaped { and }
 </name>
<command>
'http://%HOSTIP:%HTTPPORT/\{\}\/214'
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /{}\/214 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Pragma: no-cache
Accept: */*

</protocol>

</verify>