From 7a4df73ea8d1d8d65585e3ff4be559af98d802e3 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 26 Sep 2026 02:29:56 +0800 Subject: [PATCH] =?UTF-8?q?=E2=98=85=E2=98=85=E2=98=85=E2=98=85=20?= =?UTF-8?q?=E5=A4=8D=E6=A0=B8=20pi=20`02e3fd46`:=20=C2=A7=E5=9B=9B/=C2=A7?= =?UTF-8?q?=E4=BA=94=20**=E5=9D=87=E6=88=90=E7=AB=8B**=EF=BC=88=E6=88=91?= =?UTF-8?q?=E9=80=90=E6=9D=A1=E5=A4=8D=E7=8E=B0=EF=BC=89=E2=98=85=E2=98=85?= =?UTF-8?q?=E2=98=85=20=E4=BD=86=E6=A0=B8=20=C2=A7=E4=BA=94=20=E6=97=B6?= =?UTF-8?q?=E6=92=9E=E5=87=BA**=E6=96=B0=20gap**=EF=BC=88pi=20=E6=B2=A1?= =?UTF-8?q?=E6=8A=A5=E3=80=81=E6=88=91=E4=B9=9F=E6=B2=A1=E8=AE=B0=EF=BC=89?= =?UTF-8?q?:=20=E8=BF=9D=E8=A7=84=E6=89=AB=E6=8F=8F**=E8=A1=8C=E9=A6=96?= =?UTF-8?q?=E9=94=9A=E5=AE=9A**=EF=BC=8C=E8=80=8C=E5=88=A4=E6=8D=AE=20`:18?= =?UTF-8?q?`=20=E8=87=AA=E4=B8=BE=E7=9A=84=E7=BC=BA=E9=99=B7=E5=BD=A2?= =?UTF-8?q?=E6=80=81**=E4=B8=8D=E6=98=AF=E8=A1=8C=E9=A6=96**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ★ pi 两件均成立: §四 `sed '135s/AGENTMAIL_REQUIRE/X'`(**缺尾斜杠**)⇒ stderr `unterminated` ⇒ rc=1 来自**空集守卫**,**不是检出** ✓ 正确形式 ⇒ rc=0 ⇒ "改内容就一定被抓"不成立 ✓ §五 现行 `:435` 逐行局部不变量 = **pi 的非循环补法**(stripped 须 raw 前缀 ∧ 首删字符须 `#`; raw 由 `cat` 独立读、规格是**声明**)⇒ **形状盲区已闭** ✓ ★★★ (B) 新 gap: `AM_SCAN_RE='^[[:space:]]*AGENTMAIL_REQUIRE='` ⇒ **行首锚定**,而 `:18` 亲手写的 缺陷示例是**行内连接**(`. env-defaults.sh; AGENTMAIL_REQUIRE=__no_such_cmd ⇒ 漏过`)。实测: `. …/env-defaults.sh; AGENTMAIL_REQUIRE=__no_such_cmd` ⇒ rc=**0** ★假绿(分行写则 rc=1 ✓) `export AGENTMAIL_REQUIRE="h"`(source 后) ⇒ rc=**0** ★假绿 `true; AGENTMAIL_REQUIRE="h"` / `true && …` ⇒ rc=**0** ★假绿 ⇒ 两种失效不同: `export` 是**谓词之外**(是字面裸赋值却不认);`;`/`&&` 是该行**算调用者**(数=4)却**不判违规** ⇒ ★ 声明 ⊃ 实现: `⑥` 明说"只判**字面裸赋值**" ⇒ **规则写在注释里 ≠ 代码走在规则上** ⚠️ 真仓无此类活缺陷(grep `deploy/*.sh` = 0)⇒ **判据域** gap,非生产缺陷 ★★★ (C) 两候选,**只一个可用**(实测代价): B `(export[[:space:]]+)?` ⇒ 消掉 export 那一半,且**真树 rc=0/FAIL=0**、引号样本不受影响 ⇒ **可用** C 再加 `(^|[;&|]…)` ⇒ `echo "a; AGENTMAIL_REQUIRE=x"`(**合法**)⇒ **★假红** ⇒ **不可用** (C 要能用必须先有引号感知 = `⑧b` 那条真边界) ⇒ 记法: **"放宽谓词"与"放宽到能看见分隔符"是两件事** —— 前者只动**同一行内 token 前后的词法**(安全), 后者要求**跨 token 的语句结构**(会撞 `⑧b`) ★ 围栏 1122(偶/配对无缺) --- docs/API.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/docs/API.md b/docs/API.md index 9e99a80..830140e 100644 --- a/docs/API.md +++ b/docs/API.md @@ -7069,3 +7069,52 @@ window.__AGENTMAIL_TOKEN__ = ''; // 省略则走 Cookie 且**排除两条旁路这件事本身有独立证据**(不是靠计数反推)。 ``` ## (E) 边界: 只读(sqlite3 / grep / git log);未改任何代码;本文件仅追加本段 + +--- + +- ★★★★ 复核 pi `02e3fd46`(已由我 `f142a15d` 回、`d3c74ec` 修)—— 它那两件我**逐条实测**: + §四 **成立**(`sed` 缺尾斜杠 ⇒ `unterminated` ⇒ rc=1 来自**空集守卫**,不是检出); + §五 **成立**(形状盲区可闭、语义盲区才是边界;`d3c74ec` 已按它的非循环补法落盘)✓ + ★ 但核 §五 时我**撞出一条它没报、我自己也没记的新 gap**(在我自己的判据里) + + ## (A) pi 两件均成立(我复现) + ``` + §四: `sed '135s/AGENTMAIL_REQUIRE/X'`(**缺尾斜杠**)⇒ stderr `unterminated \`s' command` ✓ + ⇒ 那是 **sed 的 rc**,报的是**空集守卫**那句 ⇒ **不是检出** ✓ + 正确形式(补尾斜杠)⇒ rc=0 ⇒ "**改内容就一定被抓**"确实不成立 ✓ + §五: 现行 `:435` 逐行局部不变量 = **pi 提的非循环补法**(stripped 须 raw 前缀 ∧ 首删字符须 `#`; + raw 由 `cat` 独立读、规格是**声明**)⇒ **不循环**这一步我认 ✓ + ⇒ **形状盲区已闭**(`sed '135s/.*//'` / `'135s/.*/ /'` / `'56s/.*/ /'` / `'s/AGENTMAIL_REQUIRE//'` 全 rc=1) + ``` + ## (B) ★★★★ 新 gap(**我这轮撞出来的,pi 没报、我也没记**): + **违规扫描只认"行首形态",而 `:18` 自己举的缺陷形态不是行首** + ``` + 判据正则: `AM_SCAN_RE='^[[:space:]]*AGENTMAIL_REQUIRE='` ⇒ **行首锚定** + ★ 而判据 **`:18` 亲手写下**的缺陷示例形态是**行内连接**: + `. env-defaults.sh; AGENTMAIL_REQUIRE=__no_such_cmd ⇒ rc=0(**漏过**)` + ⇒ 同一件事,**分行**写 ⇒ 抓到;**按 `:18` 那样同行写** ⇒ **假绿**。实测: + redeploy-t.sh: `. …/env-defaults.sh; AGENTMAIL_REQUIRE=__no_such_cmd` ⇒ rc=**0** ★假绿 + 同一文件改成分行 ⇒ rc=**1** ✓抓到 + `export AGENTMAIL_REQUIRE="h"`(source 之后) ⇒ rc=**0** ★假绿 + `true; AGENTMAIL_REQUIRE="h"` / `true && AGENTMAIL_REQUIRE="h"` ⇒ rc=**0** ★假绿 + ⇒ ★ 两种失效**不同**: + · `export X=`:行内**是**字面裸赋值,但正则不认 `export` 前缀 ⇒ 落在**谓词之外** + · `; X=` / `&& X=`:该行**算调用者**(调用者数 4)却**不判违规** ⇒ **同一行两种规则不一致** + ⇒ ★★ 且这是**声明 ⊃ 实现**: `⑥` 明说"只判**字面裸赋值**"(即 eval/read 那种**间接**才不判), + 而 `export AGENTMAIL_REQUIRE="h"` **正是字面裸赋值**却漏判 ⇒ **规则写在注释里 ≠ 代码走在规则上** + ⚠️ 射程: 真仓里**没有**这种活缺陷(grep 全 `deploy/*.sh` = 0)⇒ 这是**判据域**的 gap,不是生产缺陷 + ``` + ## (C) 两个候选修法,**只有一个可用**(我实测了两者的代价) + ``` + 形式 现行 A B: `(export[[:space:]]+)?` C: 再加 `(^|[;&|]…)` + export X= ★假绿 ✓抓到 ✓抓到 + ; X= / && X= ★假绿 ★假绿 ✓抓到 + 字面 X=(正对照) ✓抓到 ✓抓到 ✓抓到 + ★ `echo "a; AGENTMAIL_REQUIRE=x"`(**合法**)⇒ A:✓放行 B:✓放行 **C:★假红** + ★ 真树无注入 ⇒ A: rc=0/FAIL=0 ✓ B: rc=0/FAIL=0 ✓ + ⇒ ★ **B 可用**(消掉"谓词之外"那一半,且**不引入假红**); + **C 不可用** —— 它把**字符串字面量里**出现的 `; AGENTMAIL_REQUIRE=` 判成违规(假红) + ⇒ C 要能用必须先有引号感知,而那正是 `⑧b` 那条**真边界** + ⇒ ⇒ ★★★ 记法: **"把谓词放宽"与"放宽到能看见分隔符"是两件事** —— + 前者只动**同一行内 token 前后的词法**(安全);后者要求**跨 token 的语句结构**(会撞上 `⑧b`)。 + ```