mirror of
https://github.com/moparisthebest/curl
synced 2024-08-13 17:03:50 -04:00
glob_next_url: make sure to stay within the given output buffer
This commit is contained in:
parent
fbb5f1aa03
commit
269a889104
@ -431,6 +431,7 @@ CURLcode glob_url(URLGlob** glob, char* url, unsigned long *urlnum,
|
|||||||
glob_buffer = malloc(strlen(url) + 1);
|
glob_buffer = malloc(strlen(url) + 1);
|
||||||
if(!glob_buffer)
|
if(!glob_buffer)
|
||||||
return CURLE_OUT_OF_MEMORY;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
glob_buffer[0]=0;
|
||||||
|
|
||||||
glob_expand = calloc(1, sizeof(URLGlob));
|
glob_expand = calloc(1, sizeof(URLGlob));
|
||||||
if(!glob_expand) {
|
if(!glob_expand) {
|
||||||
@ -548,20 +549,25 @@ CURLcode glob_next_url(char **globbed, URLGlob *glob)
|
|||||||
switch(pat->type) {
|
switch(pat->type) {
|
||||||
case UPTSet:
|
case UPTSet:
|
||||||
if(pat->content.Set.elements) {
|
if(pat->content.Set.elements) {
|
||||||
len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
|
|
||||||
snprintf(buf, buflen, "%s",
|
snprintf(buf, buflen, "%s",
|
||||||
pat->content.Set.elements[pat->content.Set.ptr_s]);
|
pat->content.Set.elements[pat->content.Set.ptr_s]);
|
||||||
|
len = strlen(buf);
|
||||||
buf += len;
|
buf += len;
|
||||||
buflen -= len;
|
buflen -= len;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case UPTCharRange:
|
case UPTCharRange:
|
||||||
*buf++ = pat->content.CharRange.ptr_c;
|
if(buflen) {
|
||||||
|
*buf++ = pat->content.CharRange.ptr_c;
|
||||||
|
*buf = '\0';
|
||||||
|
buflen--;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case UPTNumRange:
|
case UPTNumRange:
|
||||||
len = snprintf(buf, buflen, "%0*ld",
|
snprintf(buf, buflen, "%0*ld",
|
||||||
pat->content.NumRange.padlength,
|
pat->content.NumRange.padlength,
|
||||||
pat->content.NumRange.ptr_n);
|
pat->content.NumRange.ptr_n);
|
||||||
|
len = strlen(buf);
|
||||||
buf += len;
|
buf += len;
|
||||||
buflen -= len;
|
buflen -= len;
|
||||||
break;
|
break;
|
||||||
@ -570,7 +576,6 @@ CURLcode glob_next_url(char **globbed, URLGlob *glob)
|
|||||||
return CURLE_FAILED_INIT;
|
return CURLE_FAILED_INIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*buf = '\0';
|
|
||||||
|
|
||||||
*globbed = strdup(glob->glob_buffer);
|
*globbed = strdup(glob->glob_buffer);
|
||||||
if(!*globbed)
|
if(!*globbed)
|
||||||
|
Loading…
Reference in New Issue
Block a user