From 8cbbe017bd15365c8d7886a2fa167f4c55650bef Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 18 Mar 2019 00:40:10 +0300 Subject: [PATCH] Fix registering file sources in FileStatsWorker. GitOrigin-RevId: 0a971c9248d5d4fa9106d7ef4751d2431a50c80e --- td/telegram/files/FileData.h | 2 +- td/telegram/files/FileData.hpp | 6 +++--- td/telegram/files/FileDb.cpp | 5 ++++- td/telegram/files/FileStatsWorker.cpp | 5 +++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/td/telegram/files/FileData.h b/td/telegram/files/FileData.h index efcedfe2..d6ad4d5c 100644 --- a/td/telegram/files/FileData.h +++ b/td/telegram/files/FileData.h @@ -35,7 +35,7 @@ class FileData { void store(StorerT &storer) const; template - void parse(ParserT &parser); + void parse(ParserT &parser, bool register_file_sources); }; inline StringBuilder &operator<<(StringBuilder &sb, const FileData &file_data) { diff --git a/td/telegram/files/FileData.hpp b/td/telegram/files/FileData.hpp index ab34c4bc..e4b1912d 100644 --- a/td/telegram/files/FileData.hpp +++ b/td/telegram/files/FileData.hpp @@ -61,7 +61,7 @@ void FileData::store(StorerT &storer) const { } } template -void FileData::parse(ParserT &parser) { +void FileData::parse(ParserT &parser, bool register_file_sources) { using ::td::parse; bool has_owner_dialog_id; bool has_expected_size; @@ -96,8 +96,8 @@ void FileData::parse(ParserT &parser) { parse(url_, parser); encryption_key_.parse(encryption_key_is_secure ? FileEncryptionKey::Type::Secure : FileEncryptionKey::Type::Secret, parser); - if (has_sources) { - auto td = G()->td().get_actor_unsafe(); + if (has_sources && register_file_sources) { + Td *td = G()->td().get_actor_unsafe(); int32 size; parse(size, parser); if (0 < size && size < 5) { diff --git a/td/telegram/files/FileDb.cpp b/td/telegram/files/FileDb.cpp index 4586ca41..47678562 100644 --- a/td/telegram/files/FileDb.cpp +++ b/td/telegram/files/FileDb.cpp @@ -275,8 +275,11 @@ class FileDb : public FileDbInterface { //LOG(DEBUG) << "By id " << id.get() << " found data " << format::as_hex_dump<4>(Slice(data_str)); //LOG(INFO) << attempt_count; + TlParser parser(data_str); FileData data; - auto status = unserialize(data, data_str); + data.parse(parser, true); + parser.fetch_end(); + auto status = parser.get_status(); if (status.is_error()) { return std::move(status); } diff --git a/td/telegram/files/FileStatsWorker.cpp b/td/telegram/files/FileStatsWorker.cpp index baa978e3..ef36002c 100644 --- a/td/telegram/files/FileStatsWorker.cpp +++ b/td/telegram/files/FileStatsWorker.cpp @@ -53,9 +53,10 @@ Status scan_db(CallbackT &&callback) { if (value.substr(0, 2) == "@@") { return; } + TlParser parser(value); FileData data; - auto status = unserialize(data, value); - if (status.is_error()) { + data.parse(parser, false); + if (parser.get_status().is_error()) { LOG(ERROR) << "Invalid FileData in the database " << tag("value", format::escaped(value)); return; }