aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdutils
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2025-04-16 12:48:34 +0300
committerlevlam <levlam@telegram.org>2025-04-16 12:48:34 +0300
commit987e7dfe084161ca202de1b0ad14471ea90c109d (patch)
tree198e13d3c9505d5f8d53712a975b03501f079ac7 /tdutils
parentf1b7500310baa496c0b779e4273a3aff0f14f42f (diff)
Allow unaligned data in TlParser.
Diffstat (limited to 'tdutils')
-rw-r--r--tdutils/td/utils/tl_parsers.cpp17
-rw-r--r--tdutils/td/utils/tl_parsers.h9
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)];