Fix garbage header being prepended to native symbol uploads.

Change-Id: I96887504ad9dc47dda6ebc5be7c193a1eb1f94d1
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3825137
Reviewed-by: Zequan Wu <zequanwu@google.com>
This commit is contained in:
Nelson Billing 2022-08-10 13:07:29 -07:00
parent f1f7b5272f
commit c44d14ac89

View file

@ -357,10 +357,10 @@ namespace {
return header; return header;
} }
bool AppendFileToRequestBody( bool AppendFileToRequestBody(const wstring& file_part_name,
const wstring& file_part_name, const wstring& filename,
const wstring& filename, string* request_body,
string* request_body) { bool set_content_type = true) {
string file_part_name_utf8 = WideToUTF8(file_part_name); string file_part_name_utf8 = WideToUTF8(file_part_name);
if (file_part_name_utf8.empty()) { if (file_part_name_utf8.empty()) {
return false; return false;
@ -371,11 +371,17 @@ namespace {
return false; return false;
} }
request_body->append("Content-Disposition: form-data; " if (set_content_type) {
"name=\"" + file_part_name_utf8 + "\"; " request_body->append(
"filename=\"" + filename_utf8 + "\"\r\n"); "Content-Disposition: form-data; "
request_body->append("Content-Type: application/octet-stream\r\n"); "name=\"" +
request_body->append("\r\n"); file_part_name_utf8 +
"\"; "
"filename=\"" +
filename_utf8 + "\"\r\n");
request_body->append("Content-Type: application/octet-stream\r\n");
request_body->append("\r\n");
}
vector<char> contents; vector<char> contents;
if (!GetFileContents(filename, &contents)) { if (!GetFileContents(filename, &contents)) {
@ -432,7 +438,11 @@ namespace google_breakpad {
wstring* response_body, wstring* response_body,
int* response_code) { int* response_code) {
string request_body; string request_body;
if (!AppendFileToRequestBody(L"symbol_file", path, &request_body)) { // Turn off content-type in the body. If content-type is set then binary
// files uploaded to GCS end up with the it prepended to the file
// contents.
if (!AppendFileToRequestBody(L"symbol_file", path, &request_body,
/*set_content_type=*/false)) {
return false; return false;
} }