Skip to content

fix(go): 修复目标隔离、协议响应与并发轮询 - #15

Merged
Karl-Dai merged 1 commit into
worktree-go-rewrite-fixesfrom
fix/go-protocol-validation-cloud-20261006
Oct 7, 2026
Merged

Karl-Dai merged 1 commit into
worktree-go-rewrite-fixesfrom
fix/go-protocol-validation-cloud-20261006

Conversation

@Karl-Dai

@Karl-Dai Karl-Dai commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

适用范围

基于 Go 重写分支 worktree-go-rewrite-fixes 的 042282400697226b0738a0010479c155991af95f。改动仅涉及 go/ 与新增 Go 专用测试工作流,目标不是 main;与 Rust/Tauri + Vue 的 PR #14 分开。保持草稿,不合并、不发布。

修复内容

  • HTTP API 以 URL 中的连接和设备为准,拒绝与请求体冲突的目标;非法设备路径不再默认为设备 1。设备创建与相关设备/寄存器路径统一校验 1–247,省略创建目标仍默认为 1。
  • HTTP 读取拒绝空范围和越过 65535 的范围;修正为真的离散输入被误报不存在,以及完整 0–65535 默认设备初始化死循环。
  • 本地寄存器读写与 Modbus 协议请求使用同一个锁,修复新增并发回归暴露的 map 读写竞态。
  • 主站安全拒绝单字节/截断响应、错误功能码、错误字节数和不匹配的写入回显;多点写入在发包前校验数量与地址边界。
  • 位读取按每批实际数量裁剪填充位;扫描地址使用正确大端编码,异常响应不再被当成断线,重启或并发启动同一扫描组后仍可可靠停止。
  • 串行化同一连接的请求/响应周期;TCP/TLS 校验事务 ID、协议 ID 和设备 ID,不再丢弃读缓冲中的下一帧;RTU-over-TCP 分片不再延长整次请求截止时间。
  • React 切换/创建连接后立即清理并加载对应数据,阻止旧连接和旧请求结果覆盖当前面板;处理延迟删除和清日志完成回调。

回归与验证

先在原始 Go 基线上复现,再修复。原有测试、race 和 vet 均通过,但新增回归分别捕获 API 错误目标、地址回绕、读取 panic、扫描生命周期、错误应答、map 竞态和 React 陈旧结果。

  • Go 1.27.1:go test ./...、go test -race ./...、go vet ./... 全部通过;325 项通过事件(含子测试)。
  • 关键主站并发回归额外通过 20 次 race 重复运行;TCP/TLS 响应验证回归通过 25 次 race 重复运行。
  • React:干净 npm ci --ignore-scripts --no-audit --no-fund,11 项真实 React 组件回归测试和 TypeScript/Vite 生产构建通过。
  • 仅新增 react-test-renderer 测试依赖及必要闭包,原有锁文件依赖条目保持不变;go.mod / go.sum 未变。
  • 新增只读权限、按路径触发的 Go tests CI,运行 Go 测试/race/vet 与 React 测试/构建;现有 Rust/发布工作流不变。

验证边界

这是已复现问题的定向修复,不代表 Go 与原版全部功能对等。未启动 GUI 或开发服务器,未做真实串口硬件验收。锁修复覆盖本地数值读写与协议请求,其他直接操作设备映射的 CRUD/配置路径仍需独立并发审查。

远端 CI(head a699652)

  • Go tests #1 全部通过:Go 测试、race、vet,以及 React 的 11 项测试和生产构建。
  • 原有 Test #32 的根目录/Vue 依赖审计失败:7 个漏洞(2 moderate、5 high),涉及 Vue/server-renderer、source-map-js、brace-expansion、undici、Vitest。该根锁文件与 Go 基线相同,本 PR 未修改;未降低或跳过审计。详见失败任务。
  • 原有 Rust 任务仍在运行;因此不能将本 PR 描述为所有 CI 全绿。

@Karl-Dai
Karl-Dai marked this pull request as ready for review October 7, 2026 05:27
@Karl-Dai
Karl-Dai merged commit 530a4a0 into worktree-go-rewrite-fixes Oct 7, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant