UI: Add postDataSize option to GetRemoteText

In order to be able to POST binary data that may contain NULL-bytes we
must manually specify the size of the array, otherwise cURL will fall
back to `strlen()`.
master
derrod 2021-08-29 01:25:14 +02:00
parent 5c9aa83e05
commit 2dd8049aef
2 changed files with 8 additions and 2 deletions

View File

@ -123,7 +123,8 @@ bool GetRemoteFile(const char *url, std::string &str, std::string &error,
long *responseCode, const char *contentType,
std::string request_type, const char *postData,
std::vector<std::string> extraHeaders,
std::string *signature, int timeoutSec, bool fail_on_error)
std::string *signature, int timeoutSec, bool fail_on_error,
int postDataSize)
{
vector<string> header_in_list;
char error_in[CURL_ERROR_SIZE];
@ -196,6 +197,11 @@ bool GetRemoteFile(const char *url, std::string &str, std::string &error,
}
}
if (postData) {
if (postDataSize > 0) {
curl_easy_setopt(curl.get(),
CURLOPT_POSTFIELDSIZE,
(long)postDataSize);
}
curl_easy_setopt(curl.get(), CURLOPT_POSTFIELDS,
postData);
}

View File

@ -69,4 +69,4 @@ bool GetRemoteFile(
std::string request_type = "", const char *postData = nullptr,
std::vector<std::string> extraHeaders = std::vector<std::string>(),
std::string *signature = nullptr, int timeoutSec = 0,
bool fail_on_error = true);
bool fail_on_error = true, int postDataSize = 0);