Commit f2267d0d authored by Jonathan Metzman's avatar Jonathan Metzman Committed by Commit Bot

[LPM] Speculative fix for Mac builds of skia proto fuzzer.

On Mac builds, it looks like calling WriteNum on a size_t was causing
the compiler to select the templated version of WriteNum rather than the
uint64_t version. Hopefully it won't do the opposite (and break on calls
to WriteNum(uint64_t) because of this fix.

Bug: 808155, 769578
Change-Id: I8babcf6da5090b9bffdbcc98b573c11c02f2e489
Reviewed-on: https://chromium-review.googlesource.com/899906
Commit-Queue: Jonathan Metzman <metzman@chromium.org>
Reviewed-by: default avatarMartin Barbella <mbarbella@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534143}
parent ec65b3bd
...@@ -757,18 +757,21 @@ size_t Converter::PopStartSize() { ...@@ -757,18 +757,21 @@ size_t Converter::PopStartSize() {
template <typename T> template <typename T>
void Converter::WriteNum(const T num) { void Converter::WriteNum(const T num) {
CHECK_LE(sizeof(T), static_cast<size_t>(4)); if (sizeof(T) > 4) {
CHECK(num <= UINT32_MAX);
uint32_t four_byte_num = static_cast<uint32_t>(num);
char num_arr[sizeof(four_byte_num)];
memcpy(num_arr, &four_byte_num, sizeof(four_byte_num));
for (size_t idx = 0; idx < sizeof(four_byte_num); idx++)
output_.push_back(num_arr[idx]);
return;
}
char num_arr[sizeof(T)]; char num_arr[sizeof(T)];
memcpy(num_arr, &num, sizeof(T)); memcpy(num_arr, &num, sizeof(T));
for (size_t idx = 0; idx < sizeof(T); idx++) for (size_t idx = 0; idx < sizeof(T); idx++)
output_.push_back(num_arr[idx]); output_.push_back(num_arr[idx]);
} }
void Converter::WriteNum(const uint64_t num) {
CHECK_LE(num, UINT32_MAX);
WriteNum(static_cast<uint32_t>(num));
}
void Converter::InsertSize(const size_t size, const uint32_t position) { void Converter::InsertSize(const size_t size, const uint32_t position) {
char size_arr[sizeof(uint32_t)]; char size_arr[sizeof(uint32_t)];
memcpy(size_arr, &size, sizeof(uint32_t)); memcpy(size_arr, &size, sizeof(uint32_t));
......
...@@ -340,7 +340,6 @@ class Converter { ...@@ -340,7 +340,6 @@ class Converter {
template <typename T> template <typename T>
void WriteUInt8(T num); void WriteUInt8(T num);
void WriteUInt16(uint16_t num); void WriteUInt16(uint16_t num);
void WriteNum(const uint64_t num);
void WriteNum(const char (&num_arr)[4]); void WriteNum(const char (&num_arr)[4]);
// Write num as a number. Assumes num is four bytes or less. // Write num as a number. Assumes num is four bytes or less.
template <class T> template <class T>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment