const char* str = (char*)ptr;
const size_t cb = size*nmemb;
const char* end = (char*)ptr + cb;
+ size_t len;
if (cb > 20 && curlx_strnequal(str, "Content-disposition:", 20)) {
char *p = (char*)str + 20;
(encoded filenames (*=) are not supported) */
for(;;) {
char *filename;
+ char *semi;
while (*p && (p < end) && !ISALPHA(*p))
p++;
continue;
}
p+=9;
- filename = parse_filename(p, cb - (p - str));
+ semi = strchr(p, ';');
+
+ /* this expression below typecasts 'cb' only to avoid
+ warning: signed and unsigned type in conditional expression
+ */
+ len = semi ? (semi - p) : (ssize_t)cb - (p - str);
+ filename = parse_filename(p, len);
if (filename) {
outs->filename = filename;
break;