Add check for invalid DialogId in database.

GitOrigin-RevId: ac28b2afb276743fe203a25f53e0ff69e4e3e08d
This commit is contained in:
levlam 2018-10-26 18:36:53 +03:00
parent 4a8ba5075a
commit b9cbd43e96
2 changed files with 9 additions and 1 deletions

View File

@ -10676,7 +10676,9 @@ void MessagesManager::on_get_dialogs_from_database(vector<BufferSlice> &&dialogs
DialogDate max_dialog_date = MIN_DIALOG_DATE; DialogDate max_dialog_date = MIN_DIALOG_DATE;
for (auto &dialog : dialogs) { for (auto &dialog : dialogs) {
Dialog *d = on_load_dialog_from_database(std::move(dialog)); 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); DialogDate dialog_date(d->order, d->dialog_id);
if (max_dialog_date < dialog_date) { 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(flags, dialog_id_parser);
parse(dialog_id, 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); auto old_d = get_dialog(dialog_id);
if (old_d != nullptr) { if (old_d != nullptr) {
return old_d; return old_d;

View File

@ -72,6 +72,7 @@ struct EncryptedInputFile {
store(key_fingerprint, storer); store(key_fingerprint, storer);
} }
EncryptedInputFile() = default;
EncryptedInputFile(Type type, int64 id, int64 access_hash, int32 parts, int32 key_fingerprint) 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) { : type(type), id(id), access_hash(access_hash), parts(parts), key_fingerprint(key_fingerprint) {
} }