glob: fix regression from commit 5ca96cb844

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

Reported-by: Javier Barroso
This commit is contained in:
Daniel Stenberg 2013-10-22 00:01:17 +02:00
parent be31924f8c
commit 867b52a7ac

View File

@ -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)