Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: chrome/browser/chromeos/gdata/gdata_contacts_service.cc

Issue 10829435: contacts: Strip Unicode byte order marks from strings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use escaped bytes instead of utf-8 in test code Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/gdata/gdata_contacts_service.cc
diff --git a/chrome/browser/chromeos/gdata/gdata_contacts_service.cc b/chrome/browser/chromeos/gdata/gdata_contacts_service.cc
index b3638cf57b104287e5a103deed42e0d3ac54c00b..1af6afa96a6bf716acc21ee73b7885a19de7aace 100644
--- a/chrome/browser/chromeos/gdata/gdata_contacts_service.cc
+++ b/chrome/browser/chromeos/gdata/gdata_contacts_service.cc
@@ -14,6 +14,7 @@
#include "base/logging.h"
#include "base/memory/weak_ptr.h"
#include "base/stl_util.h"
+#include "base/string_util.h"
#include "base/time.h"
#include "base/timer.h"
#include "base/values.h"
@@ -138,6 +139,20 @@ std::string PrettyPrintValue(const base::Value& value) {
return out;
}
+// Assigns the value at |path| within |dict| to |out|, returning false if the
+// path wasn't present. Unicode byte order marks are removed from the string.
+bool GetCleanedString(const DictionaryValue& dict,
+ const std::string& path,
+ std::string* out) {
+ if (!dict.GetString(path, out))
+ return false;
+
+ // The Unicode byte order mark, U+FEFF, is useless in UTF-8 strings (which are
+ // interpreted one byte at a time).
+ ReplaceSubstringsAfterOffset(out, 0, "\xEF\xBB\xBF", "");
+ return true;
+}
+
// Returns whether an address is primary, given a dictionary representing a
// single address.
bool IsAddressPrimary(const DictionaryValue& address_dict) {
@@ -164,7 +179,7 @@ void InitAddressType(const DictionaryValue& address_dict,
else
type->set_relation(contacts::Contact_AddressType_Relation_OTHER);
- address_dict.GetString(kAddressLabelField, type->mutable_label());
+ GetCleanedString(address_dict, kAddressLabelField, type->mutable_label());
}
// Maps the protocol from a dictionary representing a contact's IM address to a
@@ -248,12 +263,13 @@ bool FillContactFromDictionary(const base::DictionaryValue& dict,
if (contact->deleted())
return true;
- dict.GetString(kFullNameField, contact->mutable_full_name());
- dict.GetString(kGivenNameField, contact->mutable_given_name());
- dict.GetString(kAdditionalNameField, contact->mutable_additional_name());
- dict.GetString(kFamilyNameField, contact->mutable_family_name());
- dict.GetString(kNamePrefixField, contact->mutable_name_prefix());
- dict.GetString(kNameSuffixField, contact->mutable_name_suffix());
+ GetCleanedString(dict, kFullNameField, contact->mutable_full_name());
+ GetCleanedString(dict, kGivenNameField, contact->mutable_given_name());
+ GetCleanedString(
+ dict, kAdditionalNameField, contact->mutable_additional_name());
+ GetCleanedString(dict, kFamilyNameField, contact->mutable_family_name());
+ GetCleanedString(dict, kNamePrefixField, contact->mutable_name_prefix());
+ GetCleanedString(dict, kNameSuffixField, contact->mutable_name_suffix());
const ListValue* email_list = NULL;
if (dict.GetList(kEmailField, &email_list)) {
@@ -263,8 +279,11 @@ bool FillContactFromDictionary(const base::DictionaryValue& dict,
return false;
contacts::Contact_EmailAddress* email = contact->add_email_addresses();
- if (!email_dict->GetString(kEmailAddressField, email->mutable_address()))
+ if (!GetCleanedString(*email_dict,
+ kEmailAddressField,
+ email->mutable_address())) {
return false;
+ }
email->set_primary(IsAddressPrimary(*email_dict));
InitAddressType(*email_dict, email->mutable_type());
}
@@ -278,8 +297,11 @@ bool FillContactFromDictionary(const base::DictionaryValue& dict,
return false;
contacts::Contact_PhoneNumber* phone = contact->add_phone_numbers();
- if (!phone_dict->GetString(kPhoneNumberField, phone->mutable_number()))
+ if (!GetCleanedString(*phone_dict,
+ kPhoneNumberField,
+ phone->mutable_number())) {
return false;
+ }
phone->set_primary(IsAddressPrimary(*phone_dict));
InitAddressType(*phone_dict, phone->mutable_type());
}
@@ -294,8 +316,9 @@ bool FillContactFromDictionary(const base::DictionaryValue& dict,
contacts::Contact_PostalAddress* address =
contact->add_postal_addresses();
- if (!address_dict->GetString(kPostalAddressFormattedField,
- address->mutable_address())) {
+ if (!GetCleanedString(*address_dict,
+ kPostalAddressFormattedField,
+ address->mutable_address())) {
return false;
}
address->set_primary(IsAddressPrimary(*address_dict));
@@ -312,8 +335,9 @@ bool FillContactFromDictionary(const base::DictionaryValue& dict,
contacts::Contact_InstantMessagingAddress* im =
contact->add_instant_messaging_addresses();
- if (!im_dict->GetString(kInstantMessagingAddressField,
- im->mutable_address())) {
+ if (!GetCleanedString(*im_dict,
+ kInstantMessagingAddressField,
+ im->mutable_address())) {
return false;
}
im->set_primary(IsAddressPrimary(*im_dict));

Powered by Google App Engine
This is Rietveld 408576698