From efa770ce738c0a1425b2d7b6d5fb5e0c05066e3c Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 31 Jul 2021 09:06:43 +0300 Subject: [PATCH] Remove usage of the default account.passwordInputSettings constructor. --- td/telegram/PasswordManager.cpp | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/td/telegram/PasswordManager.cpp b/td/telegram/PasswordManager.cpp index 0bf057bc7..09a4c5312 100644 --- a/td/telegram/PasswordManager.cpp +++ b/td/telegram/PasswordManager.cpp @@ -635,13 +635,16 @@ Result PasswordManager::get_password_inp Result PasswordManager::get_password_input_settings( const UpdateSettings &update_settings, bool has_password, const NewPasswordState &state, const PasswordPrivateState *private_state) { - auto settings = make_tl_object(); bool have_secret = private_state != nullptr && private_state->secret; auto update_secure_secret = update_settings.update_secure_secret; + int32 flags = 0; + BufferSlice new_password_hash; + tl_object_ptr new_algo; + string new_hint; if (update_settings.update_password) { - settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_PASSWORD_HASH_MASK; - settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_ALGO_MASK; - settings->flags_ |= telegram_api::account_passwordInputSettings::HINT_MASK; + flags |= telegram_api::account_passwordInputSettings::NEW_PASSWORD_HASH_MASK; + flags |= telegram_api::account_passwordInputSettings::NEW_ALGO_MASK; + flags |= telegram_api::account_passwordInputSettings::HINT_MASK; if (!update_settings.new_password.empty()) { auto new_client_salt = create_salt(state.client_salt); @@ -650,16 +653,15 @@ Result PasswordManager::get_password_inp if (new_hash.is_error()) { return Status::Error(400, "Unable to change password, because it may be unsafe"); } - settings->new_password_hash_ = new_hash.move_as_ok(); - settings->new_algo_ = - make_tl_object( - std::move(new_client_salt), BufferSlice(state.server_salt), state.srp_g, BufferSlice(state.srp_p)); - settings->hint_ = std::move(update_settings.new_hint); + new_password_hash = new_hash.move_as_ok(); + new_algo = make_tl_object( + std::move(new_client_salt), BufferSlice(state.server_salt), state.srp_g, BufferSlice(state.srp_p)); + new_hint = std::move(update_settings.new_hint); if (have_secret) { update_secure_secret = true; } } else { - settings->new_algo_ = make_tl_object(); + new_algo = make_tl_object(); } } @@ -673,6 +675,7 @@ Result PasswordManager::get_password_inp update_secure_secret = false; } + tl_object_ptr new_secure_settings; if (update_secure_secret) { auto secret = have_secret ? std::move(private_state->secret.value()) : secure_storage::Secret::create_new(); auto algorithm = @@ -681,15 +684,16 @@ Result PasswordManager::get_password_inp update_settings.update_password ? update_settings.new_password : update_settings.current_password, algorithm->salt_.as_slice(), secure_storage::EnryptionAlgorithm::Pbkdf2); - settings->flags_ |= telegram_api::account_passwordInputSettings::NEW_SECURE_SETTINGS_MASK; - settings->new_secure_settings_ = make_tl_object( + flags |= telegram_api::account_passwordInputSettings::NEW_SECURE_SETTINGS_MASK; + new_secure_settings = make_tl_object( std::move(algorithm), BufferSlice(encrypted_secret.as_slice()), secret.get_hash()); } if (update_settings.update_recovery_email_address) { - settings->flags_ |= telegram_api::account_passwordInputSettings::EMAIL_MASK; - settings->email_ = std::move(update_settings.recovery_email_address); + flags |= telegram_api::account_passwordInputSettings::EMAIL_MASK; } - return std::move(settings); + return make_tl_object( + flags, std::move(new_algo), std::move(new_password_hash), new_hint, update_settings.recovery_email_address, + std::move(new_secure_settings)); } void PasswordManager::do_update_password_settings_impl(UpdateSettings update_settings, PasswordState state,