Commit 867b52a7 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

glob: fix regression from commit 5ca96cb8

Plain strings after glob ranges/lists weren't treated correctly but
caused broken URLs to get used.

Reported-by: Javier Barroso
parent be31924f
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -40,7 +40,8 @@ typedef enum {

void glob_cleanup(URLGlob* glob);

static GlobCode glob_fixed(URLGlob *glob, unsigned long *amount)
static GlobCode glob_fixed(URLGlob *glob, unsigned long *amount,
                           char *fixed, size_t len)
{
  URLPattern *pat = &glob->pattern[glob->size];
  pat->type = UPTSet;
@@ -55,10 +56,13 @@ static GlobCode glob_fixed(URLGlob *glob, unsigned long *amount)
  if(!pat->content.Set.elements)
    return GLOBERROR("out of memory", 0, GLOB_NO_MEM);

  pat->content.Set.elements[0] = strdup(glob->glob_buffer);
  pat->content.Set.elements[0] = malloc(len+1);
  if(!pat->content.Set.elements[0])
    return GLOBERROR("out of memory", 0, GLOB_NO_MEM);

  memcpy(pat->content.Set.elements[0], fixed, len);
  pat->content.Set.elements[0][len] = 0;

  return GLOB_OK;
}

@@ -307,11 +311,11 @@ static GlobCode glob_parse(URLGlob *glob, char *pattern,
  /* processes a literal string component of a URL
     special characters '{' and '[' branch to set/range processing functions
   */
  char* buf = glob->glob_buffer;
  GlobCode res = GLOB_OK;
  int globindex = 0; /* count "actual" globs */

  while(*pattern && !res) {
    char *buf = glob->glob_buffer;
    int sublen = 0;
    while(*pattern && *pattern != '{' && *pattern != '[') {
      if(*pattern == '}' || *pattern == ']')
@@ -333,7 +337,7 @@ static GlobCode glob_parse(URLGlob *glob, char *pattern,
    if(sublen) {
      /* we got a literal string, add it as a single-item list */
      *buf = '\0';
      res = glob_fixed(glob, amount);
      res = glob_fixed(glob, amount, glob->glob_buffer, sublen);
    }
    else {
      if(!*amount)