Skip to content

Commit 91c26fa

Browse files
Jon MannCommit Bot
authored andcommitted
Encode serialized proto in base64 before saving to base::Value.
This fixes a broken DCHECK caused by storing a string which is not UTF8 encoded in a base::Value. Bug: 966270 Change-Id: I6e2084ffebe3bb8cefa1bd48f0f39e435c3442e4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2186747 Reviewed-by: James Vecore <vecore@google.com> Commit-Queue: Jon Mann <jonmann@chromium.org> Cr-Commit-Position: refs/heads/master@{#766438}
1 parent 37fb86b commit 91c26fa

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

chromeos/components/sync_wifi/pending_network_configuration_tracker_impl.cc

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "chromeos/components/sync_wifi/pending_network_configuration_tracker_impl.h"
66

7+
#include "base/base64url.h"
78
#include "base/guid.h"
89
#include "base/optional.h"
910
#include "base/strings/stringprintf.h"
@@ -34,10 +35,15 @@ PendingNetworkConfigurationUpdate ConvertToPendingUpdate(
3435
const NetworkIdentifier& id) {
3536
std::string* change_guid = dict->FindStringKey(kChangeGuidKey);
3637
base::Optional<sync_pb::WifiConfigurationSpecifics> specifics;
37-
std::string* specifics_string = dict->FindStringKey(kSpecificsKey);
38-
if (!specifics_string->empty()) {
38+
std::string* encoded_specifics_string = dict->FindStringKey(kSpecificsKey);
39+
std::string specifics_string;
40+
if (encoded_specifics_string &&
41+
base::Base64UrlDecode(*encoded_specifics_string,
42+
base::Base64UrlDecodePolicy::REQUIRE_PADDING,
43+
&specifics_string) &&
44+
!specifics_string.empty()) {
3945
sync_pb::WifiConfigurationSpecifics data;
40-
data.ParseFromString(*specifics_string);
46+
data.ParseFromString(specifics_string);
4147
specifics = data;
4248
}
4349
base::Optional<int> completed_attempts =
@@ -76,11 +82,16 @@ std::string PendingNetworkConfigurationTrackerImpl::TrackPendingUpdate(
7682
else
7783
CHECK(specifics->SerializeToString(&serialized_specifics));
7884

85+
// base::Value only allows UTF8 encoded strings.
86+
std::string encoded_specifics;
87+
base::Base64UrlEncode(serialized_specifics,
88+
base::Base64UrlEncodePolicy::INCLUDE_PADDING,
89+
&encoded_specifics);
7990
std::string change_guid = base::GenerateGUID();
8091

8192
dict_.SetPath(GeneratePath(id, kChangeGuidKey), base::Value(change_guid));
8293
dict_.SetPath(GeneratePath(id, kSpecificsKey),
83-
base::Value(serialized_specifics));
94+
base::Value(encoded_specifics));
8495
dict_.SetPath(GeneratePath(id, kCompletedAttemptsKey), base::Value(0));
8596
pref_service_->Set(kPendingNetworkConfigurationsPref, dict_);
8697

0 commit comments

Comments
 (0)