| Index: chrome/browser/themes/browser_theme_pack.cc
|
| diff --git a/chrome/browser/themes/browser_theme_pack.cc b/chrome/browser/themes/browser_theme_pack.cc
|
| index fef23f27ec18bea770f6eeb19355a40bb3f70292..12b073e763370324ce54729e1dd4b44651251d57 100644
|
| --- a/chrome/browser/themes/browser_theme_pack.cc
|
| +++ b/chrome/browser/themes/browser_theme_pack.cc
|
| @@ -188,32 +188,30 @@ int GetPersistentIDByIDR(int idr) {
|
|
|
| // Returns true if the scales in |input| match those in |expected|.
|
| // The order must match as the index is used in determining the raw id.
|
| -bool InputScalesValid(const char* input,
|
| +bool InputScalesValid(const base::StringPiece& input,
|
| const std::vector<ui::ScaleFactor>& expected) {
|
| - const float* scales = reinterpret_cast<const float*>(input);
|
| - size_t index = 0;
|
| - for (const float* end = scales; *end != -1.0f; ++end) {
|
| - if (index >= expected.size())
|
| - return false;
|
| - if (*end != ui::GetScaleFactorScale(expected[index]))
|
| + size_t scales_size = static_cast<size_t>(input.size() / sizeof(float));
|
| + if (scales_size != expected.size())
|
| + return false;
|
| + scoped_array<float> scales(new float[scales_size]);
|
| + // Do a memcpy to avoid misaligned memory access.
|
| + memcpy(scales.get(), input.data(), input.size());
|
| + for (size_t index = 0; index < scales_size; ++index) {
|
| + if (scales[index] != ui::GetScaleFactorScale(expected[index]))
|
| return false;
|
| - index++;
|
| }
|
| - return (index == expected.size());
|
| + return true;
|
| }
|
|
|
| // Returns |scale_factors| as a string to be written to disk.
|
| std::string GetScaleFactorsAsString(
|
| const std::vector<ui::ScaleFactor>& scale_factors) {
|
| - size_t scales_size = scale_factors.size() + 1;
|
| - float* scales = new float[scales_size];
|
| + scoped_array<float> scales(new float[scale_factors.size()]);
|
| for (size_t i = 0; i < scale_factors.size(); ++i)
|
| scales[i] = ui::GetScaleFactorScale(scale_factors[i]);
|
| - scales[scales_size - 1] = -1.0f;
|
| std::string out_string = std::string(
|
| - reinterpret_cast<const char*>(scales),
|
| - scales_size * sizeof(float));
|
| - delete[] scales;
|
| + reinterpret_cast<const char*>(scales.get()),
|
| + scale_factors.size() * sizeof(float));
|
| return out_string;
|
| }
|
|
|
| @@ -508,12 +506,10 @@ scoped_refptr<BrowserThemePack> BrowserThemePack::BuildFromDataPack(
|
| if (!pack->data_pack_->GetStringPiece(kScaleFactorsID, &pointer))
|
| return NULL;
|
|
|
| - if (!InputScalesValid(const_cast<char*>(pointer.data()),
|
| - pack->scale_factors_)) {
|
| + if (!InputScalesValid(pointer, pack->scale_factors_)) {
|
| DLOG(ERROR) << "BuildFromDataPack failure! The pack scale factors differ "
|
| << "from those supported by platform.";
|
| }
|
| -
|
| return pack;
|
| }
|
|
|
|
|