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/CPageCollectionEvent.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 108 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageCollectionEvent.cpp b/SourceCode/Bond/Servo/CPageCollectionEvent.cpp
index b7d3322..46f4b71 100644
--- a/SourceCode/Bond/Servo/CPageCollectionEvent.cpp
+++ b/SourceCode/Bond/Servo/CPageCollectionEvent.cpp
@@ -5,6 +5,7 @@
#include "Servo.h"
#include "CPageCollectionEvent.h"
#include "afxdialogex.h"
+#include "CEventEditDlg.h"
// CPageCollectionEvent 瀵硅瘽妗�
@@ -32,6 +33,7 @@
ON_WM_CTLCOLOR()
ON_WM_DESTROY()
ON_WM_SIZE()
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CPageCollectionEvent::OnLvnItemchangedList1)
END_MESSAGE_MAP()
@@ -123,3 +125,109 @@
m_listCtrl.SetItemText(index, 4, item->getReportIdsText().c_str());
}
}
+
+void CPageCollectionEvent::OnCreateBtns()
+{
+ const int BTN_W = 80;
+ const int BTN_H = 28;
+ CreateBtn(_T("鏂板"), BTN_W, BTN_H, 3001);
+ CreateBtn(_T("鍒犻櫎"), BTN_W, BTN_H, 3002)->EnableWindow(FALSE);
+ CreateBtn(_T("缂栬緫"), BTN_W, BTN_H, 3003)->EnableWindow(FALSE);
+}
+
+void CPageCollectionEvent::OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
+ int nSelCount = m_listCtrl.GetSelectedCount();
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) {
+ pDel->EnableWindow(nSelCount > 0);
+ }
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) {
+ pEdit->EnableWindow(nSelCount > 0);
+ }
+ *pResult = 0;
+}
+
+void CPageCollectionEvent::OnClickedBtn(const char* btnName)
+{
+ ASSERT(btnName);
+ if (_strcmpi(btnName, "鏂板") == 0) {
+ int rc = UX_CanExecute(L"addEvents");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+ unsigned int newId = theApp.m_model.m_hsmsPassive.getMaxCollectionEventId() + 1;
+ std::vector<unsigned int> rptIds;
+ CEventEditDlg dlg(_T("鏂板浜嬩欢"), (int)newId, _T(""), _T(""), rptIds, this);
+ if (dlg.DoModal() != IDOK) return;
+
+ int ret = theApp.m_model.m_hsmsPassive.addCollectionEvent(newId, CT2A(dlg.GetNameText()), CT2A(dlg.GetDescText()), dlg.GetSelectedRptIds());
+ if (ret == 0) {
+ UX_RecordAction(L"addEvents");
+ m_listCtrl.DeleteAllItems();
+ loadCollectionEvents();
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) pDel->EnableWindow(FALSE);
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) pEdit->EnableWindow(FALSE);
+ }
+ else {
+ AfxMessageBox(_T("鏂板浜嬩欢澶辫触锛堝彲鑳絀D閲嶅鎴栧啓鍏ュけ璐ワ級"));
+ }
+ }
+ else if (_strcmpi(btnName, "鍒犻櫎") == 0) {
+ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
+ if (pos == nullptr) return;
+ int nItem = m_listCtrl.GetNextSelectedItem(pos);
+ auto pEvent = reinterpret_cast<SERVO::CCollectionEvent*>(m_listCtrl.GetItemData(nItem));
+ if (pEvent == nullptr) return;
+
+ int rc = UX_CanExecute(L"delEvents");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+
+ int ret = theApp.m_model.m_hsmsPassive.deleteCollectionEvent((unsigned short)pEvent->getEventId());
+ if (ret == 0) {
+ UX_RecordAction(L"delEvents");
+ m_listCtrl.DeleteAllItems();
+ loadCollectionEvents();
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) pDel->EnableWindow(FALSE);
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) pEdit->EnableWindow(FALSE);
+ }
+ else {
+ AfxMessageBox(_T("鍒犻櫎浜嬩欢澶辫触"));
+ }
+ }
+ else if (_strcmpi(btnName, "缂栬緫") == 0) {
+ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
+ if (pos == nullptr) return;
+ int nItem = m_listCtrl.GetNextSelectedItem(pos);
+ auto pEvent = reinterpret_cast<SERVO::CCollectionEvent*>(m_listCtrl.GetItemData(nItem));
+ if (pEvent == nullptr) return;
+
+ int rc = UX_CanExecute(L"editEvents");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+
+ CString name = pEvent->getName().c_str();
+ CString desc = pEvent->getDescription().c_str();
+ auto rptIds = pEvent->getReportIds();
+ CEventEditDlg dlg(_T("缂栬緫浜嬩欢"), (int)pEvent->getEventId(), name, desc, rptIds, this);
+ if (dlg.DoModal() != IDOK) return;
+
+ int ret = theApp.m_model.m_hsmsPassive.updateCollectionEvent(pEvent->getEventId(), CT2A(dlg.GetNameText()), CT2A(dlg.GetDescText()), dlg.GetSelectedRptIds());
+ if (ret == 0) {
+ UX_RecordAction(L"editEvents");
+ m_listCtrl.DeleteAllItems();
+ loadCollectionEvents();
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) pDel->EnableWindow(FALSE);
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) pEdit->EnableWindow(FALSE);
+ }
+ else {
+ AfxMessageBox(_T("缂栬緫浜嬩欢澶辫触锛堝彲鑳藉啓鍏ュけ璐ワ級"));
+ }
+ }
+}
--
Gitblit v1.9.3