From b9cbd43e96ec13a3f5a2f0a38cf1557819c77d02 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 26 Oct 2018 18:36:53 +0300 Subject: [PATCH] Add check for invalid DialogId in database. GitOrigin-RevId: ac28b2afb276743fe203a25f53e0ff69e4e3e08d --- td/telegram/MessagesManager.cpp | 9 ++++++++- td/telegram/logevent/SecretChatEvent.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 097404332..5e4d176f5 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -10676,7 +10676,9 @@ void MessagesManager::on_get_dialogs_from_database(vector &&dialogs DialogDate max_dialog_date = MIN_DIALOG_DATE; for (auto &dialog : dialogs) { Dialog *d = on_load_dialog_from_database(std::move(dialog)); - CHECK(d != nullptr); + if (d == nullptr) { + continue; + } DialogDate dialog_date(d->order, d->dialog_id); if (max_dialog_date < dialog_date) { @@ -21674,6 +21676,11 @@ MessagesManager::Dialog *MessagesManager::on_load_dialog_from_database(const Res parse(flags, dialog_id_parser); parse(dialog_id, dialog_id_parser); + if (!dialog_id.is_valid()) { + LOG(ERROR) << "Failed to parse dialog_id from blob. Database is broken"; + return nullptr; + } + auto old_d = get_dialog(dialog_id); if (old_d != nullptr) { return old_d; diff --git a/td/telegram/logevent/SecretChatEvent.h b/td/telegram/logevent/SecretChatEvent.h index fdba32230..4ad444eed 100644 --- a/td/telegram/logevent/SecretChatEvent.h +++ b/td/telegram/logevent/SecretChatEvent.h @@ -72,6 +72,7 @@ struct EncryptedInputFile { store(key_fingerprint, storer); } + EncryptedInputFile() = default; EncryptedInputFile(Type type, int64 id, int64 access_hash, int32 parts, int32 key_fingerprint) : type(type), id(id), access_hash(access_hash), parts(parts), key_fingerprint(key_fingerprint) { }