# libdatacenter 缺陷修复方案 ## 缺陷 1 & 2: AO/Param 重注册持锁外 delete **问题**: `dc_signal_ao`(line 1123) 和 `dc_signal_param`(line 1347-1348) 在 re-registration 路径中, `dc_delete_signal_data` 在 `dc_signal_add_to_map` 锁外执行,use-after-free 风险。 **修复**: 将 re-registration 路径重构为在 `signal_ao.mtx`/`signal_param.mtx` 锁内完成 delete+replace。 具体:先加锁,再 delete 旧数据并替换新指针,unlock。 ## 缺陷 3: 回调向量无锁写入 **问题**: `change_cb_list.push_back` 和 `out_change_cb_list.push_back` 在多处无锁调用。 **修复**: 在 `dc_signal_add_to_map` 末尾或调用点加 `dc_signal_map.mtx` 保护 push_back。 ## 缺陷 4: YK 跳过值校验 **问题**: `dc_signal_yk_set_status` 只调 `dc_check_ctrl_valid`,不调 `dc_check_val_valid`。 **修复**: DIRECT 步骤增加 `dc_check_val_valid` 调用。 ## 缺陷 5: strncpy 安全 **问题**: IP/MAC/C 类型用 `strncpy(dst,src,len)`,源串=len时不补\0。 **修复**: 改为 `memcpy(dst, src, len)`。 ## 涉及文件 | 文件 | 改动 | |------|------| | `src/system/libdatacenter/src/dc_signal.cpp` | 5处修改 | ## 验证 ```bash ./release/build.sh ```