diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tool_urlglob.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/tool_urlglob.c b/src/tool_urlglob.c index 5f9451952..4208327de 100644 --- a/src/tool_urlglob.c +++ b/src/tool_urlglob.c @@ -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) |