JianFeeeee
1639382eaa
fix(部署判据): ⑤ 的口径从「数子串出现次数」改成「只认源码**文件路径**」
## 起因
trimpath 修好之后(67 处 → 0 处真源码路径),判据第 6 条**仍红 1 处**。
查下去发现那 1 处不是缺陷:
server/internal/handler/mail.go:645 的 400 错误文案 ——
「请带上你所处工作区的绝对路径,例如 &workspace=/home/program/agentmail」
那是**给调用方看的示例值**,且它在二进制字符串表里紧邻下一条 SQL 字面量,
拼成 `…/agentmailINSERT INTO mails (session_id, …)` ——
**看起来极像「路径 + 代码」,实际是两条无关的字符串常量相邻**。
## ★★ 我上一轮把它误判成「测试夹具」
我grep 源码时命中的是 `notify_test.go` 里的 workspace 夹具,
就下了「是测试数据」的结论 —— 那是**另一个**字符串(`seedAdopted(t,"pi","pid-ws-1",
"/home/program/agentmail")`),只是恰好也含 REPO。
**真正的来源是生产错误文案。** 先下结论再取证,又一次。
## 口径改动
原口径 `text.split(REPO).length - 1` 数的是**子串出现次数**,把两件事混成一件:
· 真缺陷:trimpath 没生效,产物里印着 `…/server/internal/repo/repo.go`
· 误报: 源码里**本来就该有的字符串**恰好含这个子串
⇒ 改成逐个出现位置看**后缀**:REPO 之后是**源码文件扩展名**才是真路径。
这条判据要抓的是"源码**文件位置**被泄露",扩展名正是它的形状;
而示例值后面跟的是 `INSERT`(SQL 关键字),不是文件。
## 两条都要报(把两者混成一个数字正是原口径的毛病)
bad = 真源码路径 ⇒ **判红**
other = 还有别处出现但不是文件路径 ⇒ **只提示**,且**给出真实样例**
第一版的"只提示"那档输出了「样例:见下」而样例永远取不到值
(只给真路径留了样例)—— 一句指向不存在内容的指路词。已修。
## 验证(两侧都用**真 26MB 二进制**,不是合成样本)
已部署(-trimpath) 源码路径=0 非文件字样=1 ⇒ 判绿 ✓
本地构建(无 trimpath) 源码路径=66 非文件字样=1 ⇒ 判红 ✓
## 自检
新增一格反面样本:`★网关二进制:非源码路径的仓库字样(示例值)不得误判红`
(`--self-check` 47 → **48** 格)。
变异验证:把 `SRC_EXT.test(tail)` 改成 `true`(退回数子串)⇒
该格**打红**且整套自检报"检查器本身不可信" ⇒ 新格确有分辨力。
2026-09-28 08:46:02 +08:00
..
2026-09-25 06:51:25 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-09-28 08:46:02 +08:00
2026-09-24 04:15:30 +08:00
2026-09-18 04:07:26 +08:00
2026-09-12 11:36:25 +08:00
2026-09-26 02:56:26 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-25 06:51:25 +08:00
2026-09-21 07:14:41 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-26 03:43:47 +08:00
2026-09-25 06:51:25 +08:00
2026-09-25 06:51:25 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-09-14 08:38:33 +08:00