| Index: ui/base/resource/resource_bundle_posix.cc
|
| diff --git a/ui/base/resource/resource_bundle_posix.cc b/ui/base/resource/resource_bundle_posix.cc
|
| index d23a5b1da0986e82e09bd0cd52c68204084066a7..066053ec387a1a60206440c0e4c858645cd27112 100644
|
| --- a/ui/base/resource/resource_bundle_posix.cc
|
| +++ b/ui/base/resource/resource_bundle_posix.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/string16.h"
|
| #include "base/string_piece.h"
|
| #include "base/synchronization/lock.h"
|
| +#include "base/utf_string_conversions.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/data_pack.h"
|
| #include "ui/base/ui_base_switches.h"
|
| @@ -88,10 +89,19 @@ string16 ResourceBundle::GetLocalizedString(int message_id) {
|
| }
|
| }
|
|
|
| - // Data pack encodes strings as UTF16.
|
| - DCHECK_EQ(data.length() % 2, 0U);
|
| - string16 msg(reinterpret_cast<const char16*>(data.data()),
|
| - data.length() / 2);
|
| + // Strings should not be loaded from data back that contain binary data.
|
| + DCHECK(locale_resources_data_->GetTextEncodingType() == DataPack::UTF16 ||
|
| + locale_resources_data_->GetTextEncodingType() == DataPack::UTF8)
|
| + << "requested localized string from binary pack file";
|
| +
|
| + // Data pack encodes strings as either UTF8 or UTF16.
|
| + string16 msg;
|
| + if (locale_resources_data_->GetTextEncodingType() == DataPack::UTF16) {
|
| + msg = string16(reinterpret_cast<const char16*>(data.data()),
|
| + data.length() / 2);
|
| + } else if (locale_resources_data_->GetTextEncodingType() == DataPack::UTF8) {
|
| + msg = UTF8ToUTF16(data);
|
| + }
|
| return msg;
|
| }
|
|
|
|
|