Commit c4b5d63d authored by Vadym Doroshenko's avatar Vadym Doroshenko Committed by Commit Bot

Fix in PasswordManager.

When new parsing for saving enabled PasswordManager::MoveOwnedSubmittedManager
tries to find submitted NewPasswordFormManager and if it's found it's moved.
As result there is nullptr in |form_managers_|. That would crash this function
if it's called twice. This CL makes this function behaves gracefully - to remove
nullptr.

Bug: 880229
Change-Id: I7f91a113dc33a6a2d0b483485a66657bec9e6d28
Reviewed-on: https://chromium-review.googlesource.com/1206591Reviewed-by: default avatarVaclav Brozek <vabr@chromium.org>
Commit-Queue: Vadym Doroshenko <dvadym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589116}
parent 842b0fa9
...@@ -1169,10 +1169,16 @@ PasswordManager::MoveOwnedSubmittedManager() { ...@@ -1169,10 +1169,16 @@ PasswordManager::MoveOwnedSubmittedManager() {
if (owned_submitted_form_manager_) if (owned_submitted_form_manager_)
return std::move(owned_submitted_form_manager_); return std::move(owned_submitted_form_manager_);
for (std::unique_ptr<NewPasswordFormManager>& manager : form_managers_) { for (auto iter = form_managers_.begin(); iter != form_managers_.end();
if (manager->is_submitted()) ++iter) {
return std::move(manager); if ((*iter)->is_submitted()) {
std::unique_ptr<NewPasswordFormManager> submitted_manager =
std::move(*iter);
form_managers_.erase(iter);
return std::move(submitted_manager);
} }
}
NOTREACHED(); NOTREACHED();
return nullptr; return nullptr;
} }
......
...@@ -2625,6 +2625,7 @@ TEST_F(PasswordManagerTest, ProcessingOtherSubmissionTypes) { ...@@ -2625,6 +2625,7 @@ TEST_F(PasswordManagerTest, ProcessingOtherSubmissionTypes) {
EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_))
.WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save)));
manager()->OnPasswordFormSubmittedNoChecks(&driver_, submitted_form); manager()->OnPasswordFormSubmittedNoChecks(&driver_, submitted_form);
EXPECT_TRUE(manager()->form_managers().empty());
} }
TEST_F(PasswordManagerTest, SubmittedGaiaFormWithoutVisiblePasswordField) { TEST_F(PasswordManagerTest, SubmittedGaiaFormWithoutVisiblePasswordField) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment