diff options
| author | levlam <levlam@telegram.org> | 2025-04-16 12:48:34 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2025-04-16 12:48:34 +0300 |
| commit | 987e7dfe084161ca202de1b0ad14471ea90c109d (patch) | |
| tree | 198e13d3c9505d5f8d53712a975b03501f079ac7 /tdutils/td | |
| parent | f1b7500310baa496c0b779e4273a3aff0f14f42f (diff) | |
Allow unaligned data in TlParser.
Diffstat (limited to 'tdutils/td')
| -rw-r--r-- | tdutils/td/utils/tl_parsers.cpp | 17 | ||||
| -rw-r--r-- | tdutils/td/utils/tl_parsers.h | 9 |
2 files changed, 2 insertions, 24 deletions
diff --git a/tdutils/td/utils/tl_parsers.cpp b/tdutils/td/utils/tl_parsers.cpp index 9f506a7d8..8ccef085e 100644 --- a/tdutils/td/utils/tl_parsers.cpp +++ b/tdutils/td/utils/tl_parsers.cpp @@ -15,22 +15,7 @@ namespace td { alignas(4) const unsigned char TlParser::empty_data[sizeof(UInt512)] = {}; // static zero-initialized -TlParser::TlParser(Slice slice) { - data_len = left_len = slice.size(); - if (is_aligned_pointer<4>(slice.begin())) { - data = slice.ubegin(); - } else { - int32 *buf; - if (data_len <= small_data_array.size() * sizeof(int32)) { - buf = &small_data_array[0]; - } else { - // LOG(ERROR) << "Unexpected big unaligned data pointer of length " << slice.size() << " at " << slice.begin(); - data_buf = std::make_unique<int32[]>(1 + data_len / sizeof(int32)); - buf = data_buf.get(); - } - std::memcpy(buf, slice.begin(), slice.size()); - data = reinterpret_cast<unsigned char *>(buf); - } +TlParser::TlParser(Slice slice) : data(slice.ubegin()), data_len(slice.size()), left_len(slice.size()) { } void TlParser::set_error(const string &error_message) { diff --git a/tdutils/td/utils/tl_parsers.h b/tdutils/td/utils/tl_parsers.h index 62576124d..571ff7a11 100644 --- a/tdutils/td/utils/tl_parsers.h +++ b/tdutils/td/utils/tl_parsers.h @@ -13,11 +13,8 @@ #include "td/utils/Status.h" #include "td/utils/UInt.h" -#include <array> #include <cstring> #include <limits> -#include <memory> -#include <string> namespace td { @@ -26,11 +23,7 @@ class TlParser { size_t data_len = 0; size_t left_len = 0; size_t error_pos = std::numeric_limits<size_t>::max(); - std::string error; - - std::unique_ptr<int32[]> data_buf; - static constexpr size_t SMALL_DATA_ARRAY_SIZE = 6; - std::array<int32, SMALL_DATA_ARRAY_SIZE> small_data_array; + string error; alignas(4) static const unsigned char empty_data[sizeof(UInt512)]; |
