mirror of
https://github.com/curl/curl.git
synced 2026-08-05 01:06:13 +03:00
allow write callbacks to indicate OOM to libcurl
Allow (*curl_write_callback) write callbacks to return CURL_WRITEFUNC_OUT_OF_MEMORY to properly indicate libcurl of OOM conditions inside the callback itself.
This commit is contained in:
parent
e276802ff8
commit
119f43360b
8 changed files with 50 additions and 5 deletions
|
|
@ -47,6 +47,10 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
|
|||
const size_t cb = size * nmemb;
|
||||
const char *end = (char*)ptr + cb;
|
||||
|
||||
if(cb >= CURL_WRITEFUNC_PAUSE)
|
||||
/* CURL_WRITEFUNC_PAUSE limits input size */
|
||||
return CURL_WRITEFUNC_OUT_OF_MEMORY;
|
||||
|
||||
if(cb > 20 && checkprefix("Content-disposition:", str)) {
|
||||
const char *p = str + 20;
|
||||
|
||||
|
|
@ -74,12 +78,13 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
|
|||
*/
|
||||
len = (ssize_t)cb - (p - str);
|
||||
filename = parse_filename(p, len);
|
||||
/* TODO: OOM handling - return (size_t)-1 ? */
|
||||
if(filename) {
|
||||
outs->filename = filename;
|
||||
outs->alloc_filename = TRUE;
|
||||
break;
|
||||
}
|
||||
else
|
||||
return CURL_WRITEFUNC_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,10 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
|
|||
*/
|
||||
const size_t err_rc = (sz * nmemb) ? 0 : 1;
|
||||
|
||||
if(sz * nmemb >= CURL_WRITEFUNC_PAUSE)
|
||||
/* CURL_WRITEFUNC_PAUSE limits input size */
|
||||
return CURL_WRITEFUNC_OUT_OF_MEMORY;
|
||||
|
||||
if(!out->stream) {
|
||||
out->bytes = 0; /* nothing written yet */
|
||||
if(!out->filename) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue