fix:处理一个内存错误问题。

This commit is contained in:
taynpg 2025-04-09 15:05:56 +08:00
parent a5cab61603
commit 807dbdfede
3 changed files with 16 additions and 10 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)
project(transm VERSION 1.5.0 LANGUAGES CXX)
project(transm VERSION 1.5.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

View File

@ -793,8 +793,8 @@ bool CClient::cmd_ls(const std::string& param)
buf->type_ = TYPE_GET_DIRFILES;
CMessageInfo msg_info(own_id_);
msg_info.str = path;
serialize(msg_info, &buf->data_, buf->len_);
buf->tid_ = sr->id;
serialize(msg_info, &buf->data_, buf->len_);
if (!send_frame(buf.get())) {
TLOGE("Send Failed {}", __LINE__);
@ -1094,13 +1094,13 @@ void CClient::handle_frame(CFrameBuffer* buf)
if (!get_dir_files(msg_info.str, out, err)) {
TLOGE("Get Dir Files Failed. {}", err);
buf->type_ = TYPE_GET_DIRFILES_FAILED;
delete[] buf->data_;
msg_info.str = err;
} else {
buf->type_ = TYPE_GET_DIRFILES_DONE;
delete[] buf->data_;
msg_info.str = out;
}
delete[] buf->data_;
buf->data_ = nullptr;
serialize(msg_info, &buf->data_, buf->len_);
std::swap(buf->tid_, buf->fid_);
if (!send_frame(buf)) {

View File

@ -9,7 +9,7 @@
CTransProtocal::CTransProtocal() = default;
constexpr uint8_t kz = 16;
static bool use_encrypt = true;
static bool use_encrypt = false;
CTransProtocal::~CTransProtocal() = default;
/*
@ -144,12 +144,13 @@ void serialize(CMessageInfo& msg_info, char** out_buf, int& len)
// 计算总长度
len = sizeof(int) * 4 + info.id.size() + info.uuid.size() + info.str.size() + info.data.size() + kz + 1;
// 《这里为了效率》,认为如果 *out_buf 不为空,则直接使用,且长度符合要求
// 调用方负责确保内存够用性(len小于最大长度)和可用性。
// 即,如果调用方及高频率调用 serialize, 且每次 len 固定就复用内存,完了再释放。
// 《这里为了效率》,
// 认为如果 *out_buf 不为空,则直接使用,且长度符合要求
// 调用方负责确保内存够用性(len <= 可用最大空间长度)和内存可用性。
// 即,如果调用方及高频率调用 serialize, 且每次 len <= 已分配空间就复用内存,完了再释放。
// 低频率或者 len 不固定时,每次都释放内存,并置 nullptr。
if (*out_buf == nullptr) {
*out_buf = new char[len]{}; // 分配内存(调用方负责释放)
*out_buf = new char[len]; // 分配内存(调用方负责释放)
}
char* ptr = *out_buf + kz + 1;
@ -312,9 +313,14 @@ void hash(const char* data, uint8_t k[32])
void rdm(uint8_t* o, size_t size)
{
/*
random_device
mt19937 + uniform_int_distribution
*/
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(0, 255);
std::generate(o, o + size, [&]() { return static_cast<uint8_t>(dist(rd)); });
std::generate(o, o + size, [&]() { return static_cast<uint8_t>(dist(gen)); });
}
bool encrypt(const uint8_t* k, uint8_t* m, size_t len)