On Mon, 8 Dec 2014, Patrick Monnerat wrote:

Downloading a SMB file larger than 16K (CURL_MAX_WRITE_SIZE) with a
DEBUGBUILD curl gives:

       Warning: Data size exceeds single call write limit!

and the corresponding data is lost.

Obviously, SMB writes data chunks larger than CURL_MAX_WRITE_SIZE! I don't know how (where) you want to fix it, thus I just report the problem to the list.

Thanks!

The problem is that a too large buffer is passed to Curl_client_write(), since that is potentially done as a callback to the user and we have a defined maximum size we must keep within. It must thus at least be converted into a loop of calls.

It also makes me curious where the values for MAX_PAYLOAD_SIZE and MAX_MESSAGE_SIZE come from? Also, if we could be happy with CURL_MAX_WRITE_SIZE sized buffer we could aavoid the extra allocations in smb.c compeletely! They are a bit disturbing since we already alloc two 16K buffers that are just wasted when SMB is used.

Additionally: Curl_client_write() is used without checking the return code which is a major nono [*]. It MUST check the return code and bail out on errors.

[*] = I intend to work on adding a gcc specific warning for the functions that we consider most important to check the return code for, to catch mistakes like this easier.

--

 / daniel.haxx.se
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to