From 7352ac408b6a7b4a1474f52d845fbba70c9644ae Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Thu, 7 Jun 2012 21:57:53 +0200 Subject: Fixes allowing HTTP test cases 1338, 1339, 1368 and 1369 to succeed --- src/tool_cb_hdr.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/tool_cb_hdr.c') diff --git a/src/tool_cb_hdr.c b/src/tool_cb_hdr.c index 738cd5dfc..ddc4c6638 100644 --- a/src/tool_cb_hdr.c +++ b/src/tool_cb_hdr.c @@ -71,8 +71,25 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata) fwrite(ptr, size, nmemb, heads->stream); } - if((urlnode->flags & GETOUT_USEREMOTE) && outs->config->content_disposition - && (cb > 20) && checkprefix("Content-disposition:", str)) { + /* + ** This callback callback MIGHT set the filename upon appropriate + ** conditions and server specifying filename in Content-Disposition. + */ + + if(!outs->config->content_disposition) + return cb; + + if(!urlnode) + return failure; + + if(!checkprefix("http://", urlnode->url) && + !checkprefix("https://", urlnode->url)) + return cb; + + if(!(urlnode->flags & GETOUT_USEREMOTE)) + return cb; + + if((cb > 20) && checkprefix("Content-disposition:", str)) { const char *p = str + 20; /* look for the 'filename=' parameter @@ -102,6 +119,7 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata) if(filename) { outs->filename = filename; outs->alloc_filename = TRUE; + outs->is_cd_filename = TRUE; outs->s_isreg = TRUE; outs->fopened = FALSE; outs->stream = NULL; -- cgit v1.2.3