From 0a83eafd91137a090fc6e05de6b70b08fcfb843c Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 25 Sep 2026 07:52:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B3=E6=8A=A5=20=E2=91=A7=20=E6=9B=B4?= =?UTF-8?q?=E6=AD=A3:=20=E9=80=90=E6=96=87=E4=BB=B6=E6=8E=A2=E9=92=88?= =?UTF-8?q?=E7=9A=84**=E7=9C=9F=E7=9B=B2=E5=8C=BA**=E6=98=AF"=E6=8A=B9?= =?UTF-8?q?=E6=8E=89=E6=9F=90=E4=B8=80=E8=A1=8C=E7=9A=84=E5=86=85=E5=AE=B9?= =?UTF-8?q?"=EF=BC=88=E4=BF=9D=E8=A1=8C=E6=95=B0/=E9=A1=BA=E5=BA=8F/?= =?UTF-8?q?=E4=B8=A4=E7=AB=AF=EF=BC=89=EF=BC=9B=E2=98=85=20=E5=B9=B6?= =?UTF-8?q?=E5=8C=BA=E5=88=86"=E6=8D=A2=E9=9D=A2=E5=8F=AF=E9=97=AD"(?= =?UTF-8?q?=E2=91=A4=EF=BC=8C=E6=88=91=E8=AF=AF=E5=88=A4=E8=BF=87)=20?= =?UTF-8?q?=E4=B8=8E"=E8=A6=81=E6=8B=BF=E5=88=B0=E5=AE=83=E5=BE=97?= =?UTF-8?q?=E5=85=88=E6=9C=89=E5=AE=83"(=E7=9C=9F=E8=BE=B9=E7=95=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ★ 我第一版 ⑧ 写的是"不能证明注释剥离的语义正确",并举了"只删整行注释"当例子 —— **实测那个例子会被抓到**(rc=1),所以那段**陈述不准确**,已换掉。 ★ 实测出的**真盲区**(可复现): 只清空**违规行本身**的内容、其余行原样 ⇒ 行数/顺序/两端全不变 ⇒ 探针通过 ⇒ **假绿**: `strip_text` 尾接 `sed '135s/.*//'`(或 `'135s/.*/ /'`)⇒ rc=**0** 对照: `sed '135s/AGENTMAIL_REQUIRE/X'` ⇒ rc=**1**(它同时动了别的可匹配串) ⇒ 所以"改内容就一定被抓"是**错的**;只有"**抹掉那一行**"这个形状才进盲区。 ★ 要判它需**逐行内容对照**,而那要求判据先知道"正确内容是什么" —— 对"读入环"而言这是**循环的**(它就是要读出内容的那一环)⇒ 这**确实是**边界。 ★ 关键区分(我这轮才想清楚,写进注释): ⑤ 是"**同一次观察**的无限后退" ⇒ 我当时据此申报为边界,那是**误判**(已闭); ⑧ 是"**观察对象之外**的东西"(探针看行号与两端,看不到行内被抹)。 ⇒ 判"能不能闭"要先问: 缺的信息是"**换一次观察就能拿到**"(可闭) 还是"**要拿到它就得先有它**"(真边界)。 --- deploy/check-require-declaration.sh | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/deploy/check-require-declaration.sh b/deploy/check-require-declaration.sh index d14a9be..f350fe1 100755 --- a/deploy/check-require-declaration.sh +++ b/deploy/check-require-declaration.sh @@ -321,8 +321,18 @@ exit 0 # 我当时把"换面"误判成了"后退",于是把一个可闭的点申报成了边界。 # ⑥ 间接赋值不判(eval/read/env 注入),只判**字面裸赋值**。 # ⑦ 下界守卫只挡"收到 <3 个调用者";"恰好 3 个但换掉其中一个"不判(需会漂的名单)。 -# ⑧ ★ 逐文件探针的**射程**(实测申报,不是"没想到"): 它证明"读入是逐行原位的", -# 但**不能**证明"注释剥离的语义正确" —— 例如把 `sed 's/#.*$//'` 改成 -# `sed 's/#.*$//'` 之外的**等价但不同**的规则(如只删整行注释)仍可能通过探针, -# 因为探针只查"行号与两端",不查"哪一列被删"。要判它需**按列/按语义**的对照。 +# ⑧ ★ 逐文件探针的**射程**(实测申报,不是"没想到"): 它证明的是 +# "**读入这一环保行数、保顺序、保两端**",**不**证明"**每一行的内容被原样保留**"。 +# ⇒ 具体的盲区(我实测出来的、可复现的形状): 只**清空违规行本身的内容**、 +# 其余行原样 ⇒ 行数/顺序/两端全不变 ⇒ 探针通过 ⇒ **假绿**: +# `strip_text` 尾接 `sed '135s/.*//'`(或 `'135s/.*/ /'`)⇒ rc=**0** +# (而 `sed '135s/AGENTMAIL_REQUIRE/X'` 会**被抓到** —— 因为它同时改了别的可匹配串, +# 所以"改内容就一定被抓"是**错的**,只有"抹掉那一行"这个形状才进盲区。) +# ⇒ 要判它需要**逐行内容对照**(例如把每个非注释行哈希后比长度/前缀), +# 而那要求判据先知道"正确内容是什么" —— 对"读入环"来说这是循环的(它就是要读出内容的那一环)。 +# ⇒ 因此这**确实是**边界(与 ⑥⑦ 同级)。★ 注意与 ⑤ 的区别: +# ⑤ 是"**同一次观察**的无限后退"(我当时据此申报,那是**误判**,已闭); +# ⑧ 是"**观察对象之外**的东西"(探针能看行号与两端,看不到行内内容被抹)。 +# ⇒ 判"能不能闭"要先问: 缺的信息是"**换一次观察就能拿到**"(可闭)还是 +# "**要拿到它就得先有它**"(真边界)。 # ══════════════════════════════════════════════════════════════════════════════