From 437d3d047183eed3bbd8eb79e4b40c4a1e0427c9 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期四, 15 一月 2026 10:39:31 +0800
Subject: [PATCH] 1.修复: CEID 校验恒通过:ceidDefined 返回 true,PauseEvent ID 不做有效性检查。Host 若下发无效 CEID,将被接受但运行时无法触发暂停,风险难以察觉。 指定事件发生时暂停;

---
 SourceCode/Bond/Servo/CMaster.cpp |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index ee0b951..d9a0e67 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -3,6 +3,7 @@
 #include "CMaster.h"
 #include <future>
 #include <vector>
+#include <algorithm>
 #include "RecipeManager.h"
 #include <fstream>
 #include "SerializeUtil.h"
@@ -2972,7 +2973,30 @@
 
 	bool CMaster::ceidDefined(uint32_t ceid) const
 	{
-		return true;
+		if (m_allowedCeids.empty()) return true; // backward compatible: treat as all allowed when not configured
+		return m_allowedCeids.find(ceid) != m_allowedCeids.end();
+	}
+
+	void CMaster::handleCollectionEvent(uint32_t ceid)
+	{
+		// 閬嶅巻褰撳墠 PJ锛屽懡涓� pauseEvents 鏃跺彲鍦ㄦ鎵╁睍鏆傚仠鍔ㄤ綔
+		for (auto pj : m_processJobs) {
+			if (pj == nullptr) continue;
+			const auto& pauseList = pj->pauseEvents();
+			if (std::find(pauseList.begin(), pauseList.end(), ceid) != pauseList.end()) {
+				LOGW("<Master>PauseEvent hit: CEID=%u, PJ=%s, state=%d", ceid, pj->id().c_str(), (int)pj->state());
+				// TODO: 琛旀帴鍏蜂綋鏆傚仠绛栫暐锛堝鏆傚仠 PJ/CJ銆佸仠姝㈣皟搴�/鎼�侊級锛屾澶勪粎鐣欐々浣�
+			}
+		}
+	}
+
+	void CMaster::setAllowedCeids(const std::vector<unsigned int>& ceids)
+	{
+		m_allowedCeids.clear();
+		m_allowedCeids.reserve(ceids.size());
+		for (auto id : ceids) {
+			m_allowedCeids.insert(id);
+		}
 	}
 
 	bool CMaster::saveState() const

--
Gitblit v1.9.3