diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/string_conversion.cc | 2 | ||||
-rw-r--r-- | src/common/windows/http_upload.cc | 26 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/common/string_conversion.cc b/src/common/string_conversion.cc index c4107faf..9b06e86b 100644 --- a/src/common/string_conversion.cc +++ b/src/common/string_conversion.cc @@ -140,7 +140,7 @@ string UTF16ToUTF8(const vector<uint16_t> &in, bool swap) { scoped_array<UTF8> target_buffer(new UTF8[target_capacity]); UTF8 *target_ptr = target_buffer.get(); UTF8 *target_end_ptr = target_ptr + target_capacity; - ConversionResult result = ConvertUTF16toUTF8(&source_ptr, source_end_ptr, + ConversionResult result = ConvertUTF16toUTF8(&source_ptr, source_end_ptr, &target_ptr, target_end_ptr, strictConversion); diff --git a/src/common/windows/http_upload.cc b/src/common/windows/http_upload.cc index aabb9a46..838185b7 100644 --- a/src/common/windows/http_upload.cc +++ b/src/common/windows/http_upload.cc @@ -30,7 +30,7 @@ #include <assert.h> // Disable exception handler warnings. -#pragma warning( disable : 4530 ) +#pragma warning(disable:4530) #include <fstream> @@ -163,7 +163,7 @@ bool HTTPUpload::SendRequest(const wstring &url, fwprintf(stderr, L"Could not unset receive timeout, continuing...\n"); } } - + if (!HttpSendRequest(request.get(), NULL, 0, const_cast<char *>(request_body.data()), static_cast<DWORD>(request_body.size()))) { @@ -215,8 +215,7 @@ bool HTTPUpload::ReadResponse(HINTERNET request, wstring *response) { BOOL return_code; while (((return_code = InternetQueryDataAvailable(request, &bytes_available, - 0, 0)) != 0) && bytes_available > 0) { - + 0, 0)) != 0) && bytes_available > 0) { vector<char> response_buffer(bytes_available); DWORD size_read; @@ -323,6 +322,7 @@ bool HTTPUpload::GenerateRequestBody(const map<wstring, wstring> ¶meters, // static bool HTTPUpload::GetFileContents(const wstring &filename, vector<char> *contents) { + bool rv = false; // The "open" method on pre-MSVC8 ifstream implementations doesn't accept a // wchar_t* filename, so use _wfopen directly in that case. For VC8 and // later, _wfopen has been deprecated in favor of _wfopen_s, which does @@ -336,15 +336,21 @@ bool HTTPUpload::GetFileContents(const wstring &filename, if (file.is_open()) { file.seekg(0, ios::end); std::streamoff length = file.tellg(); - contents->resize(length); - if (length != 0) { - file.seekg(0, ios::beg); - file.read(&((*contents)[0]), length); + // Check for loss of data when converting lenght from std::streamoff into + // std::vector<char>::size_type + std::vector<char>::size_type vector_size = + static_cast<std::vector<char>::size_type>(length); + if (static_cast<std::streamoff>(vector_size) == length) { + contents->resize(vector_size); + if (length != 0) { + file.seekg(0, ios::beg); + file.read(&((*contents)[0]), length); + } + rv = true; } file.close(); - return true; } - return false; + return rv; } // static |