diff options
author | Eric Hameleers <alien@slackware.com> | 2015-07-08 17:44:13 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2015-07-08 17:44:13 +0000 |
commit | baec2225fe0a1c758cff4d43874a9a538a25fa3e (patch) | |
tree | 368ee1bb081908d7b7d579eab167bdb2169441fe | |
parent | 6019ed5724ae6dee0c29bec972a82e3cd5920377 (diff) | |
download | asb-baec2225fe0a1c758cff4d43874a9a538a25fa3e.tar.gz asb-baec2225fe0a1c758cff4d43874a9a538a25fa3e.tar.xz |
Initial revision
-rw-r--r-- | chromium/build/patches/chromium_base_pickles.patch | 273 | ||||
-rw-r--r-- | chromium/build/patches/chromium_kde_pickles.patch | 251 |
2 files changed, 524 insertions, 0 deletions
diff --git a/chromium/build/patches/chromium_base_pickles.patch b/chromium/build/patches/chromium_base_pickles.patch new file mode 100644 index 00000000..a3f1edfc --- /dev/null +++ b/chromium/build/patches/chromium_base_pickles.patch @@ -0,0 +1,273 @@ +Change most uses of Pickle to base::Pickle + +There should be no behavior change. + +TBR=jschuh (IPC messages) + +Review URL: https://codereview.chromium.org/1154283003 + +Cr-Commit-Position: refs/heads/master@{#332552} + +# +# Limited patch for Slackware, only addressing native_backend_kwallet_x +# + +diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc +index 85ac9c7..12536ed 100644 +--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc ++++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc + +@@ -67,8 +67,8 @@ + bool CheckSerializedValue(const uint8_t* byte_array, + size_t length, + const std::string& realm) { +- const Pickle::Header* header = +- reinterpret_cast<const Pickle::Header*>(byte_array); ++ const base::Pickle::Header* header = ++ reinterpret_cast<const base::Pickle::Header*>(byte_array); + if (length < sizeof(*header) || + header->payload_size > length - sizeof(*header)) { + LOG(WARNING) << "Invalid KWallet entry detected (realm: " << realm << ")"; +@@ -79,7 +79,7 @@ + + // Convenience function to read a GURL from a Pickle. Assumes the URL has + // been written as a UTF-8 string. Returns true on success. +-bool ReadGURL(PickleIterator* iter, bool warn_only, GURL* url) { ++bool ReadGURL(base::PickleIterator* iter, bool warn_only, GURL* url) { + std::string url_string; + if (!iter->ReadString(&url_string)) { + if (!warn_only) +@@ -113,12 +113,12 @@ + // as either size when reading old pickles that fail to deserialize using the + // native size. Returns true on success. + bool DeserializeValueSize(const std::string& signon_realm, +- const PickleIterator& init_iter, ++ const base::PickleIterator& init_iter, + int version, + bool size_32, + bool warn_only, + ScopedVector<autofill::PasswordForm>* forms) { +- PickleIterator iter = init_iter; ++ base::PickleIterator iter = init_iter; + + size_t count = 0; + if (size_32) { +@@ -235,7 +235,7 @@ + + // Serializes a list of PasswordForms to be stored in the wallet. + void SerializeValue(const std::vector<autofill::PasswordForm*>& forms, +- Pickle* pickle) { ++ base::Pickle* pickle) { + pickle->WriteInt(kPickleVersion); + pickle->WriteSizeT(forms.size()); + for (autofill::PasswordForm* form : forms) { +@@ -637,7 +637,7 @@ + } + + // Can't we all just agree on whether bytes are signed or not? Please? +- Pickle pickle(reinterpret_cast<const char*>(bytes), length); ++ base::Pickle pickle(reinterpret_cast<const char*>(bytes), length); + *forms = DeserializeValue(signon_realm, pickle); + } + +@@ -719,7 +719,7 @@ + continue; + + // Can't we all just agree on whether bytes are signed or not? Please? +- Pickle pickle(reinterpret_cast<const char*>(bytes), length); ++ base::Pickle pickle(reinterpret_cast<const char*>(bytes), length); + AppendSecondToFirst(forms, DeserializeValue(signon_realm, pickle)); + } + return true; +@@ -756,7 +756,7 @@ + return ret == 0; + } + +- Pickle value; ++ base::Pickle value; + SerializeValue(forms, &value); + + dbus::MethodCall method_call(kKWalletInterface, "writeEntry"); +@@ -856,7 +856,7 @@ + continue; + + // Can't we all just agree on whether bytes are signed or not? Please? +- Pickle pickle(reinterpret_cast<const char*>(bytes), length); ++ base::Pickle pickle(reinterpret_cast<const char*>(bytes), length); + ScopedVector<autofill::PasswordForm> all_forms = + DeserializeValue(signon_realm, pickle); + +@@ -888,8 +888,8 @@ + // static + ScopedVector<autofill::PasswordForm> NativeBackendKWallet::DeserializeValue( + const std::string& signon_realm, +- const Pickle& pickle) { +- PickleIterator iter(pickle); ++ const base::Pickle& pickle) { ++ base::PickleIterator iter(pickle); + + int version = -1; + if (!iter.ReadInt(&version) || + +diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc +index 297a765..9c3a37c 100644 +--- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc ++++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc + +@@ -605,7 +605,8 @@ + EXPECT_EQ(sorted_expected[i].first, entries[i]); + TestKWallet::Blob value; + EXPECT_TRUE(wallet_.readEntry(folder, entries[i], &value)); +- Pickle pickle(reinterpret_cast<const char*>(value.data()), value.size()); ++ base::Pickle pickle(reinterpret_cast<const char*>(value.data()), ++ value.size()); + ScopedVector<autofill::PasswordForm> forms = + NativeBackendKWalletStub::DeserializeValue(entries[i], pickle); + const std::vector<const PasswordForm*>& expect = sorted_expected[i].second; +@@ -930,14 +931,14 @@ + + class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { + protected: +- void CreateVersion6Pickle(const PasswordForm& form, Pickle* pickle); +- void CreateVersion5Pickle(const PasswordForm& form, Pickle* pickle); +- void CreateVersion3Pickle(const PasswordForm& form, Pickle* pickle); +- void CreateVersion2Pickle(const PasswordForm& form, Pickle* pickle); +- void CreateVersion1Pickle(const PasswordForm& form, Pickle* pickle); ++ void CreateVersion6Pickle(const PasswordForm& form, base::Pickle* pickle); ++ void CreateVersion5Pickle(const PasswordForm& form, base::Pickle* pickle); ++ void CreateVersion3Pickle(const PasswordForm& form, base::Pickle* pickle); ++ void CreateVersion2Pickle(const PasswordForm& form, base::Pickle* pickle); ++ void CreateVersion1Pickle(const PasswordForm& form, base::Pickle* pickle); + void CreateVersion0Pickle(bool size_32, + const PasswordForm& form, +- Pickle* pickle); ++ base::Pickle* pickle); + void CheckVersion6Pickle(); + void CheckVersion5Pickle(); + void CheckVersion3Pickle(); +@@ -953,12 +954,12 @@ + void CreatePickle(bool size_32, + bool date_created_internal, + const PasswordForm& form, +- Pickle* pickle); ++ base::Pickle* pickle); + }; + + void NativeBackendKWalletPickleTest::CreateVersion6Pickle( + const PasswordForm& form, +- Pickle* pickle) { ++ base::Pickle* pickle) { + pickle->WriteInt(6); + CreatePickle(false, true, form, pickle); + pickle->WriteInt(form.type); +@@ -974,7 +975,7 @@ + + void NativeBackendKWalletPickleTest::CreateVersion5Pickle( + const PasswordForm& form, +- Pickle* pickle) { ++ base::Pickle* pickle) { + pickle->WriteInt(5); + CreatePickle(false, true, form, pickle); + pickle->WriteInt(form.type); +@@ -988,7 +989,8 @@ + } + + void NativeBackendKWalletPickleTest::CreateVersion3Pickle( +- const PasswordForm& form, Pickle* pickle) { ++ const PasswordForm& form, ++ base::Pickle* pickle) { + pickle->WriteInt(3); + CreatePickle(false, false, form, pickle); + pickle->WriteInt(form.type); +@@ -998,7 +1000,8 @@ + } + + void NativeBackendKWalletPickleTest::CreateVersion2Pickle( +- const PasswordForm& form, Pickle* pickle) { ++ const PasswordForm& form, ++ base::Pickle* pickle) { + pickle->WriteInt(2); + CreatePickle(false, false, form, pickle); + pickle->WriteInt(form.type); +@@ -1007,13 +1010,16 @@ + } + + void NativeBackendKWalletPickleTest::CreateVersion1Pickle( +- const PasswordForm& form, Pickle* pickle) { ++ const PasswordForm& form, ++ base::Pickle* pickle) { + pickle->WriteInt(1); + CreatePickle(false, false, form, pickle); + } + + void NativeBackendKWalletPickleTest::CreateVersion0Pickle( +- bool size_32, const PasswordForm& form, Pickle* pickle) { ++ bool size_32, ++ const PasswordForm& form, ++ base::Pickle* pickle) { + pickle->WriteInt(0); + CreatePickle(size_32, false, form, pickle); + } +@@ -1021,7 +1027,7 @@ + void NativeBackendKWalletPickleTest::CreatePickle(bool size_32, + bool date_created_internal, + const PasswordForm& form, +- Pickle* pickle) { ++ base::Pickle* pickle) { + if (size_32) + pickle->WriteUInt32(1); // Size of form list. 32 bits. + else +@@ -1044,7 +1050,7 @@ + } + + void NativeBackendKWalletPickleTest::CheckVersion6Pickle() { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = form_google_; + form.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; + CreateVersion6Pickle(form, &pickle); +@@ -1059,7 +1065,7 @@ + } + + void NativeBackendKWalletPickleTest::CheckVersion5Pickle() { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = form_google_; + CreateVersion5Pickle(form, &pickle); + +@@ -1072,7 +1078,7 @@ + } + + void NativeBackendKWalletPickleTest::CheckVersion3Pickle() { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = form_google_; + // Remove the fields which were not present in version #3. + form.display_name.clear(); +@@ -1090,7 +1096,7 @@ + } + + void NativeBackendKWalletPickleTest::CheckVersion2Pickle() { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = old_form_google_; + form.times_used = form_google_.times_used; + form.type = form_google_.type; +@@ -1107,7 +1113,7 @@ + + // Make sure that we can still read version 1 pickles. + void NativeBackendKWalletPickleTest::CheckVersion1Pickle() { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = form_google_; + CreateVersion1Pickle(form, &pickle); + +@@ -1123,7 +1129,7 @@ + + void NativeBackendKWalletPickleTest::CheckVersion0Pickle( + bool size_32, PasswordForm::Scheme scheme) { +- Pickle pickle; ++ base::Pickle pickle; + PasswordForm form = old_form_google_; + form.scheme = scheme; + CreateVersion0Pickle(size_32, form, &pickle); diff --git a/chromium/build/patches/chromium_kde_pickles.patch b/chromium/build/patches/chromium_kde_pickles.patch new file mode 100644 index 00000000..0b3b1e55 --- /dev/null +++ b/chromium/build/patches/chromium_kde_pickles.patch @@ -0,0 +1,251 @@ +[Password manager] Fix pickle creatin for KDE, bump to version 7 + +As described in http://crbug.com/494229#c11, version 6 pickles have been stored without generation_upload_status recently. This extends the definition of version 6 pickle to have this field optional. + +This CL introduces version 7 which makes that field required, and adds graceful handling of version 6. + +BUG=494229 + +Review URL: https://codereview.chromium.org/1181203003 + +Cr-Commit-Position: refs/heads/master@{#334561} +diff --git a/chrome/browser/password_manager/native_backend_kwallet_x.cc b/chrome/browser/password_manager/native_backend_kwallet_x.cc +index 12536ed..78aa1d9 100644 +--- a/chrome/browser/password_manager/native_backend_kwallet_x.cc ++++ b/chrome/browser/password_manager/native_backend_kwallet_x.cc +@@ -30,7 +30,7 @@ + + // In case the fields in the pickle ever change, version them so we can try to + // read old pickles. (Note: do not eat old pickles past the expiration date.) +-const int kPickleVersion = 6; ++const int kPickleVersion = 7; + + // We could localize this string, but then changing your locale would cause + // you to lose access to all your stored passwords. Maybe best not to do that. +@@ -218,12 +218,18 @@ + } + + if (version > 5) { +- if (!iter.ReadInt(&generation_upload_status)) { ++ bool read_success = iter.ReadInt(&generation_upload_status); ++ if (!read_success && version > 6) { ++ // Valid version 6 pickles might still lack the ++ // generation_upload_status, see http://crbug.com/494229#c11. + LogDeserializationWarning(version, signon_realm, false); ++ return false; + } +- form->generation_upload_status = +- static_cast<PasswordForm::GenerationUploadStatus>( +- generation_upload_status); ++ if (read_success) { ++ form->generation_upload_status = ++ static_cast<PasswordForm::GenerationUploadStatus>( ++ generation_upload_status); ++ } + } + + converted_forms.push_back(form.Pass()); +@@ -259,6 +265,7 @@ + pickle->WriteString(form->avatar_url.spec()); + pickle->WriteString(form->federation_url.spec()); + pickle->WriteBool(form->skip_zero_click); ++ pickle->WriteInt(form->generation_upload_status); + } + } + +diff --git a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc +index 670cf41..b1a9524 100644 +--- a/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc ++++ b/chrome/browser/password_manager/native_backend_kwallet_x_unittest.cc +@@ -173,6 +173,7 @@ + form_google_.avatar_url = GURL("http://www.google.com/avatar"); + form_google_.federation_url = GURL("http://www.google.com/federation_url"); + form_google_.skip_zero_click = true; ++ form_google_.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; + + form_isc_.origin = GURL("http://www.isc.org/"); + form_isc_.action = GURL("http://www.isc.org/auth"); +@@ -934,15 +935,21 @@ + + class NativeBackendKWalletPickleTest : public NativeBackendKWalletTestBase { + protected: +- void CreateVersion6Pickle(const PasswordForm& form, base::Pickle* pickle); +- void CreateVersion5Pickle(const PasswordForm& form, base::Pickle* pickle); +- void CreateVersion3Pickle(const PasswordForm& form, base::Pickle* pickle); +- void CreateVersion2Pickle(const PasswordForm& form, base::Pickle* pickle); +- void CreateVersion1Pickle(const PasswordForm& form, base::Pickle* pickle); ++ // Based on |form|, fills |pickle| with data conforming to ++ // |effective_version|, but marking the pickle version as |stored_version|. In ++ // most cases the two versions should be the same. ++ void CreateVersion1PlusPickle(const PasswordForm& form, ++ base::Pickle* pickle, ++ int stored_version, ++ int effective_version); + void CreateVersion0Pickle(bool size_32, + const PasswordForm& form, + base::Pickle* pickle); +- void CheckVersion6Pickle(); ++ // As explained in http://crbug.com/494229#c11, version 6 added a new optional ++ // field to version 5. This field became required in version 7. Depending on ++ // |with_optional_field|, this method checks deserialization with or without ++ // the optional field. ++ void CheckVersion6Pickle(bool with_optional_field); + void CheckVersion5Pickle(); + void CheckVersion3Pickle(); + void CheckVersion2Pickle(); +@@ -960,63 +967,30 @@ + base::Pickle* pickle); + }; + +-void NativeBackendKWalletPickleTest::CreateVersion6Pickle( ++void NativeBackendKWalletPickleTest::CreateVersion1PlusPickle( + const PasswordForm& form, +- base::Pickle* pickle) { +- pickle->WriteInt(6); ++ base::Pickle* pickle, ++ int stored_version, ++ int effective_version) { ++ pickle->WriteInt(stored_version); + CreatePickle(false, true, form, pickle); ++ if (effective_version < 2) ++ return; + pickle->WriteInt(form.type); + pickle->WriteInt(form.times_used); + autofill::SerializeFormData(form.form_data, pickle); ++ if (effective_version < 3) ++ return; + pickle->WriteInt64(form.date_synced.ToInternalValue()); ++ if (effective_version < 4) ++ return; + pickle->WriteString16(form.display_name); + pickle->WriteString(form.avatar_url.spec()); + pickle->WriteString(form.federation_url.spec()); + pickle->WriteBool(form.skip_zero_click); ++ if (effective_version < 7) ++ return; + pickle->WriteInt(form.generation_upload_status); +-} +- +-void NativeBackendKWalletPickleTest::CreateVersion5Pickle( +- const PasswordForm& form, +- base::Pickle* pickle) { +- pickle->WriteInt(5); +- CreatePickle(false, true, form, pickle); +- pickle->WriteInt(form.type); +- pickle->WriteInt(form.times_used); +- autofill::SerializeFormData(form.form_data, pickle); +- pickle->WriteInt64(form.date_synced.ToInternalValue()); +- pickle->WriteString16(form.display_name); +- pickle->WriteString(form.avatar_url.spec()); +- pickle->WriteString(form.federation_url.spec()); +- pickle->WriteBool(form.skip_zero_click); +-} +- +-void NativeBackendKWalletPickleTest::CreateVersion3Pickle( +- const PasswordForm& form, +- base::Pickle* pickle) { +- pickle->WriteInt(3); +- CreatePickle(false, false, form, pickle); +- pickle->WriteInt(form.type); +- pickle->WriteInt(form.times_used); +- autofill::SerializeFormData(form.form_data, pickle); +- pickle->WriteInt64(form.date_synced.ToInternalValue()); +-} +- +-void NativeBackendKWalletPickleTest::CreateVersion2Pickle( +- const PasswordForm& form, +- base::Pickle* pickle) { +- pickle->WriteInt(2); +- CreatePickle(false, false, form, pickle); +- pickle->WriteInt(form.type); +- pickle->WriteInt(form.times_used); +- autofill::SerializeFormData(form.form_data, pickle); +-} +- +-void NativeBackendKWalletPickleTest::CreateVersion1Pickle( +- const PasswordForm& form, +- base::Pickle* pickle) { +- pickle->WriteInt(1); +- CreatePickle(false, false, form, pickle); + } + + void NativeBackendKWalletPickleTest::CreateVersion0Pickle( +@@ -1052,11 +1026,15 @@ + pickle->WriteInt64(form.date_created.ToTimeT()); + } + +-void NativeBackendKWalletPickleTest::CheckVersion6Pickle() { ++void NativeBackendKWalletPickleTest::CheckVersion6Pickle( ++ bool with_optional_field) { + base::Pickle pickle; + PasswordForm form = form_google_; +- form.generation_upload_status = PasswordForm::NEGATIVE_SIGNAL_SENT; +- CreateVersion6Pickle(form, &pickle); ++ if (!with_optional_field) { ++ PasswordForm default_values; ++ form.generation_upload_status = default_values.generation_upload_status; ++ } ++ CreateVersion1PlusPickle(form, &pickle, 6, with_optional_field ? 7 : 5); + + ScopedVector<PasswordForm> form_list = + NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); +@@ -1069,8 +1047,11 @@ + + void NativeBackendKWalletPickleTest::CheckVersion5Pickle() { + base::Pickle pickle; ++ PasswordForm default_values; + PasswordForm form = form_google_; +- CreateVersion5Pickle(form, &pickle); ++ // Remove the field which was not present in version #5. ++ form.generation_upload_status = default_values.generation_upload_status; ++ CreateVersion1PlusPickle(form, &pickle, 5, 5); + + ScopedVector<PasswordForm> form_list = + NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); +@@ -1082,13 +1063,15 @@ + + void NativeBackendKWalletPickleTest::CheckVersion3Pickle() { + base::Pickle pickle; ++ PasswordForm default_values; + PasswordForm form = form_google_; + // Remove the fields which were not present in version #3. +- form.display_name.clear(); +- form.avatar_url = GURL(); +- form.federation_url = GURL(); +- form.skip_zero_click = false; +- CreateVersion3Pickle(form, &pickle); ++ form.display_name = default_values.display_name; ++ form.avatar_url = default_values.avatar_url; ++ form.federation_url = default_values.federation_url; ++ form.skip_zero_click = default_values.skip_zero_click; ++ form.generation_upload_status = default_values.generation_upload_status; ++ CreateVersion1PlusPickle(form, &pickle, 3, 3); + + ScopedVector<PasswordForm> form_list = + NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); +@@ -1104,7 +1087,7 @@ + form.times_used = form_google_.times_used; + form.type = form_google_.type; + form.form_data = form_google_.form_data; +- CreateVersion2Pickle(form, &pickle); ++ CreateVersion1PlusPickle(form, &pickle, 2, 2); + + ScopedVector<PasswordForm> form_list = + NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); +@@ -1118,7 +1101,7 @@ + void NativeBackendKWalletPickleTest::CheckVersion1Pickle() { + base::Pickle pickle; + PasswordForm form = form_google_; +- CreateVersion1Pickle(form, &pickle); ++ CreateVersion1PlusPickle(form, &pickle, 1, 1); + + ScopedVector<autofill::PasswordForm> form_list = + NativeBackendKWalletStub::DeserializeValue(form.signon_realm, pickle); +@@ -1206,5 +1189,6 @@ + } + + TEST_F(NativeBackendKWalletPickleTest, CheckVersion6Pickle) { +- CheckVersion6Pickle(); ++ CheckVersion6Pickle(false); ++ CheckVersion6Pickle(true); + } |