mirror of
https://github.com/NixOS/nix.git
synced 2025-11-22 02:09:36 +01:00
libstore/filetransfer: Handle exceptions in headerCallback
Callbacks *must* never throw exceptions on the curl thread!
This commit is contained in:
parent
1e42e55fb4
commit
87d3c3ba1a
1 changed files with 11 additions and 2 deletions
|
|
@ -207,8 +207,8 @@ struct curlFileTransfer : public FileTransfer
|
||||||
result.urls.push_back(effectiveUriCStr);
|
result.urls.push_back(effectiveUriCStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t headerCallback(void * contents, size_t size, size_t nmemb)
|
size_t headerCallback(void * contents, size_t size, size_t nmemb) noexcept
|
||||||
{
|
try {
|
||||||
size_t realSize = size * nmemb;
|
size_t realSize = size * nmemb;
|
||||||
std::string line((char *) contents, realSize);
|
std::string line((char *) contents, realSize);
|
||||||
printMsg(lvlVomit, "got header for '%s': %s", request.uri, trim(line));
|
printMsg(lvlVomit, "got header for '%s': %s", request.uri, trim(line));
|
||||||
|
|
@ -261,6 +261,15 @@ struct curlFileTransfer : public FileTransfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return realSize;
|
return realSize;
|
||||||
|
} catch (...) {
|
||||||
|
#if LIBCURL_VERSION_NUM >= 0x075700
|
||||||
|
/* https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html:
|
||||||
|
You can also abort the transfer by returning CURL_WRITEFUNC_ERROR. */
|
||||||
|
callbackException = std::current_exception();
|
||||||
|
return CURL_WRITEFUNC_ERROR;
|
||||||
|
#else
|
||||||
|
return realSize;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t headerCallbackWrapper(void * contents, size_t size, size_t nmemb, void * userp)
|
static size_t headerCallbackWrapper(void * contents, size_t size, size_t nmemb, void * userp)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue