diff options
| author | levlam <levlam@telegram.org> | 2025-05-21 16:28:55 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2025-05-21 16:28:55 +0300 |
| commit | 0f1edc740b36f6eb2b42948ecc6786a6d158b3d0 (patch) | |
| tree | c25e16bf7ead3a3101fd84c77101fde5cdb2df5e | |
| parent | e59555e2f0c40a3fec04f08f98ffa262b13ff564 (diff) | |
Fix storer/parser types.
| -rw-r--r-- | tddb/td/db/BinlogKeyValue.h | 14 | ||||
| -rw-r--r-- | tddb/td/db/TQueue.cpp | 4 | ||||
| -rw-r--r-- | tddb/td/db/binlog/Binlog.cpp | 8 |
3 files changed, 18 insertions, 8 deletions
diff --git a/tddb/td/db/BinlogKeyValue.h b/tddb/td/db/BinlogKeyValue.h index c9c2a1ee1..e71318773 100644 --- a/tddb/td/db/BinlogKeyValue.h +++ b/tddb/td/db/BinlogKeyValue.h @@ -45,13 +45,13 @@ class BinlogKeyValue final : public KeyValueSyncInterface { Slice key; Slice value; template <class StorerT> - void store(StorerT &&storer) const { + void store(StorerT &storer) const { storer.store_string(key); storer.store_string(value); } template <class ParserT> - void parse(ParserT &&parser) { + void parse(ParserT &parser) { key = parser.template fetch_string<Slice>(); value = parser.template fetch_string<Slice>(); } @@ -84,7 +84,10 @@ class BinlogKeyValue final : public KeyValueSyncInterface { name, [&](const BinlogEvent &binlog_event) { Event event; - event.parse(TlParser(binlog_event.get_data())); + TlParser event_parser(binlog_event.get_data()); + event.parse(event_parser); + event_parser.fetch_end(); + LOG_CHECK(event_parser.get_error() == nullptr) << event_parser.get_status(); if (event.key.empty()) { LOG(ERROR) << "Have event with empty key"; return; @@ -109,7 +112,10 @@ class BinlogKeyValue final : public KeyValueSyncInterface { void external_init_handle(const BinlogEvent &binlog_event) { Event event; - event.parse(TlParser(binlog_event.get_data())); + TlParser event_parser(binlog_event.get_data()); + event.parse(event_parser); + event_parser.fetch_end(); + LOG_CHECK(event_parser.get_error() == nullptr) << event_parser.get_status(); if (event.key.empty()) { LOG(ERROR) << "Have external event with empty key"; return; diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index 61f8c0a9d..542f3f65a 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -486,7 +486,7 @@ struct TQueueLogEvent final : public Storer { int64 extra; template <class StorerT> - void store(StorerT &&storer) const { + void store(StorerT &storer) const { using td::store; store(queue_id, storer); store(event_id, storer); @@ -498,7 +498,7 @@ struct TQueueLogEvent final : public Storer { } template <class ParserT> - void parse(ParserT &&parser, int32 has_extra) { + void parse(ParserT &parser, int32 has_extra) { using td::parse; parse(queue_id, parser); parse(event_id, parser); diff --git a/tddb/td/db/binlog/Binlog.cpp b/tddb/td/db/binlog/Binlog.cpp index 43c0e6e39..989ea8256 100644 --- a/tddb/td/db/binlog/Binlog.cpp +++ b/tddb/td/db/binlog/Binlog.cpp @@ -81,8 +81,9 @@ struct AesCtrEncryptionEvent { store(iv_, storer); store(key_hash_, storer); } + template <class ParserT> - void parse(ParserT &&parser) { + void parse(ParserT &parser) { using td::parse; BEGIN_PARSE_FLAGS(); END_PARSE_FLAGS(); @@ -340,7 +341,10 @@ void Binlog::do_event(BinlogEvent &&event) { if (event.type_ < 0) { if (event.type_ == BinlogEvent::ServiceTypes::AesCtrEncryption) { detail::AesCtrEncryptionEvent encryption_event; - encryption_event.parse(TlParser(event.get_data())); + TlParser event_parser(event.get_data()); + encryption_event.parse(event_parser); + event_parser.fetch_end(); + LOG_CHECK(event_parser.get_error() == nullptr) << event_parser.get_status(); string key; if (aes_ctr_key_salt_ == encryption_event.key_salt_) { |
