Browse Source

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()`.
derrod 4 years ago
parent
commit
2dd8049aef
2 changed files with 8 additions and 2 deletions
  1. 7 1
      UI/remote-text.cpp
  2. 1 1
      UI/remote-text.hpp

+ 7 - 1
UI/remote-text.cpp

@@ -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);
 		}

+ 1 - 1
UI/remote-text.hpp

@@ -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);