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

Unified Diff: components/sync_driver/generic_change_processor.cc

Issue 1915983003: [Sync] Fix crash in GCP when adding encrypted entry that already exists. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed HandleDecryptError() Created 4 years, 8 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
« no previous file with comments | « no previous file | sync/internal_api/public/write_node.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync_driver/generic_change_processor.cc
diff --git a/components/sync_driver/generic_change_processor.cc b/components/sync_driver/generic_change_processor.cc
index 2df982022d69edcf38f818ec0f6d81ac73548e6b..c8deba9c08795d15a3af28df2fa16f63b6300b3f 100644
--- a/components/sync_driver/generic_change_processor.cc
+++ b/components/sync_driver/generic_change_processor.cc
@@ -537,6 +537,13 @@ syncer::SyncError GenericChangeProcessor::HandleActionAdd(
LOG(ERROR) << "Create: Bad predecessor.";
return error;
}
+ case syncer::WriteNode::INIT_FAILED_DECRYPT_EXISTING_ENTRY: {
+ syncer::SyncError error;
+ error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_);
+ error_handler()->OnSingleDataTypeUnrecoverableError(error);
+ LOG(ERROR) << "Create: Failed to decrypt.";
+ return error;
+ }
default: {
syncer::SyncError error;
error.Reset(FROM_HERE, error_prefix + "unknown error", type_);
@@ -594,55 +601,19 @@ syncer::SyncError GenericChangeProcessor::HandleActionUpdate(
error_handler()->OnSingleDataTypeUnrecoverableError(error);
LOG(ERROR) << "Update: deleted entry.";
return error;
+ } else if (result == syncer::BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY) {
+ syncer::SyncError error;
+ error.Reset(FROM_HERE, error_prefix + "failed to decrypt", type_);
+ error_handler()->OnSingleDataTypeUnrecoverableError(error);
+ LOG(ERROR) << "Update: Failed to decrypt.";
+ return error;
} else {
- syncer::Cryptographer* crypto = trans.GetCryptographer();
- syncer::ModelTypeSet encrypted_types(trans.GetEncryptedTypes());
- const sync_pb::EntitySpecifics& specifics =
- sync_node->GetEntitySpecifics();
- CHECK(specifics.has_encrypted());
- const bool can_decrypt = crypto->CanDecrypt(specifics.encrypted());
- const bool agreement = encrypted_types.Has(type_);
- if (!agreement && !can_decrypt) {
- syncer::SyncError error;
- error.Reset(FROM_HERE,
- "Failed to load encrypted entry, missing key and "
- "nigori mismatch for " +
- type_str + ".",
- type_);
- error_handler()->OnSingleDataTypeUnrecoverableError(error);
- LOG(ERROR) << "Update: encr case 1.";
- return error;
- } else if (agreement && can_decrypt) {
- syncer::SyncError error;
- error.Reset(FROM_HERE,
- "Failed to load encrypted entry, we have the key "
- "and the nigori matches (?!) for " +
- type_str + ".",
- type_);
- error_handler()->OnSingleDataTypeUnrecoverableError(error);
- LOG(ERROR) << "Update: encr case 2.";
- return error;
- } else if (agreement) {
- syncer::SyncError error;
- error.Reset(FROM_HERE,
- "Failed to load encrypted entry, missing key and "
- "the nigori matches for " +
- type_str + ".",
- type_);
- error_handler()->OnSingleDataTypeUnrecoverableError(error);
- LOG(ERROR) << "Update: encr case 3.";
- return error;
- } else {
- syncer::SyncError error;
- error.Reset(FROM_HERE,
- "Failed to load encrypted entry, we have the key"
- "(?!) and nigori mismatch for " +
- type_str + ".",
- type_);
- error_handler()->OnSingleDataTypeUnrecoverableError(error);
- LOG(ERROR) << "Update: encr case 4.";
- return error;
- }
+ NOTREACHED();
+ syncer::SyncError error;
+ error.Reset(FROM_HERE, error_prefix + "unknown error", type_);
+ error_handler()->OnSingleDataTypeUnrecoverableError(error);
+ LOG(ERROR) << "Update: Unknown error.";
+ return error;
}
}
« no previous file with comments | « no previous file | sync/internal_api/public/write_node.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698