I have code that's attempting to use CURLFORM_STREAM with curl_formadd, and it
is getting a CURLE_SEND_FAIL_REWIND error from the library.
Looking at the libcurl code, it looks like it might be a bug, but it's hard for
me to tell for sure. A full example of how the library is being used would
take a while to construct.
curl_formadd(&download->m_postMulti, &download->m_lastMulti,
CURLFORM_COPYNAME, uploadName,
CURLFORM_FILENAME, uploadFilename,
CURLFORM_CONTENTTYPE, uploadContentType,
CURLFORM_STREAM, download,
CURLFORM_CONTENTSLENGTH,
static_cast<long>(download->m_uploadSize),
CURLFORM_END);
I expected my read callbacks to get called, but instead, the transfer fails
with CURLE_SEND_FAIL_REWIND. I have a seek callback set in addition to a read
callback.
Tracing through the code, I find that it's because curl_mimepart::seekfunc is
set to null. In formdata.c there is this:
else if(post->flags & HTTPPOST_CALLBACK) {
/* the contents should be read with the callback and the size is set
with the contentslength */
if(!clen)
clen = -1;
result = curl_mime_data_cb(part, clen,
fread_func, NULL, NULL, post->userp);
}
There is no seek function being given to curl_mime_data_cb in Curl_getformdata,
resulting in mime_part_rewind failing, finally causing a CURLE_SEND_FAIL_REWIND.
Is this a bug in libcurl? My code is fairly old at this point, and wasn't
written to use curl_mime_*. Using curl_mime_data_cb solves the problem,
because I can provide the seek callback.
Thanks~
--
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html