diff options
author | Daniel Stenberg <daniel@haxx.se> | 2011-06-17 22:21:36 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-06-17 22:23:42 +0200 |
commit | f851f768578dc096c561d57ba07ffd1004d504c0 (patch) | |
tree | e8acc4af7c02b32b038b425c1185dbb86cec11af /lib | |
parent | 0126b4a959c43933072a6b9549a7bd45bc606cb0 (diff) |
CURLFORM_STREAM: acknowledge CURLFORM_FILENAME
The CURLFORM_STREAM is documented to only insert a file name (and thus
look like a file upload) in the part if CURLFORM_FILENAME is set, but in
reality it always inserted a filename="" and if CURLFORM_FILENAME wasn't
set, it would insert insert rubbish (or possibly crash).
This is now fixed to work as documented, and test 554 has been extended
to verify this.
Reported by: Sascha Swiercy
Bug: http://curl.haxx.se/mail/lib-2011-06/0070.html
Diffstat (limited to 'lib')
-rw-r--r-- | lib/formdata.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/formdata.c b/lib/formdata.c index 5419371de..aa5a79ac1 100644 --- a/lib/formdata.c +++ b/lib/formdata.c @@ -1134,15 +1134,17 @@ CURLcode Curl_getformdata(struct SessionHandle *data, /* it should be noted that for the HTTPPOST_FILENAME and HTTPPOST_CALLBACK cases the ->showfilename struct member is always assigned at this point */ - char *filebasename= - (!post->showfilename)?strippath(post->contents):NULL; - - result = AddFormDataf(&form, &size, - "; filename=\"%s\"", - (post->showfilename?post->showfilename: - filebasename)); - if(filebasename) - free(filebasename); + if(post->showfilename || (post->flags & HTTPPOST_FILENAME)) { + char *filebasename= + (!post->showfilename)?strippath(post->contents):NULL; + + result = AddFormDataf(&form, &size, + "; filename=\"%s\"", + (post->showfilename?post->showfilename: + filebasename)); + if(filebasename) + free(filebasename); + } if(result) break; |