From d7c88780e1df54f34563d60bd7fa01011d2eef03 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 26 一月 2026 23:17:17 +0800
Subject: [PATCH] 1.CSVData.cpp 里 unserialize 用了 8*2、125*2,但 serialize 只写 8 + 125 字节。 m_svRawData.insert 的 end 指针是 pszBuffer + 125*2,没有用 index 计算,可能把无效区域一起拷进去。 一旦 size 实际是 133(不是 266),就会直接越界,堆会被破坏,m_svDatas.clear() 在销毁元素时崩。
---
SourceCode/Bond/Servo/CControlJob.cpp | 37 ++++++++++++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/SourceCode/Bond/Servo/CControlJob.cpp b/SourceCode/Bond/Servo/CControlJob.cpp
index be1b43a..cb1e794 100644
--- a/SourceCode/Bond/Servo/CControlJob.cpp
+++ b/SourceCode/Bond/Servo/CControlJob.cpp
@@ -38,6 +38,12 @@
m_tEnd = src.m_tEnd;
}
+ void CControlJob::setId(std::string& id)
+ {
+ m_cjId = trimCopy(id);
+ clampString(m_cjId, MAX_ID_LEN);
+ }
+
bool CControlJob::addPJ(const std::string& pjId) {
if (pjId.empty()) return false;
auto id = pjId;
@@ -60,6 +66,28 @@
return true;
}
+ bool CControlJob::addPjPointer(CProcessJob* pj)
+ {
+ for (auto item : m_pjs) {
+ if (item->id().compare(pj->id()) == 0) return false;
+ }
+
+ m_pjs.push_back(pj);
+ return true;
+ }
+
+ bool CControlJob::removePjPointer(const std::string& id)
+ {
+ for(auto iter = m_pjs.begin(); iter != m_pjs.end(); ++iter) {
+ if ((*iter)->id().compare(id) == 0) {
+ m_pjs.erase(iter);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
bool CControlJob::removePJ(const std::string& pjId) {
auto it = std::find(m_pjIds.begin(), m_pjIds.end(), pjId);
if (it == m_pjIds.end()) return false;
@@ -74,6 +102,11 @@
const std::vector<CControlJob::ValidationIssue>& CControlJob::issues()
{
return m_issues;
+ }
+
+ void CControlJob::clearIssues()
+ {
+ m_issues.clear();
}
bool CControlJob::validateForCreate(
@@ -187,9 +220,11 @@
return true;
}
- bool CControlJob::abort() {
+ bool CControlJob::abort(std::string reason) {
if (m_state == CJState::Completed || m_state == CJState::Aborted || m_state == CJState::Failed)
return false;
+ m_failReason = trimCopy(reason);
+ clampString(m_failReason, 128);
m_state = CJState::Aborted;
markEnd();
return true;
--
Gitblit v1.9.3