From 2ce2fd03635dd599e2fbb518e689e48ed1f53536 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 21 Oct 2026 04:26:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(tools):=20=E5=AE=A1=E8=AE=A1=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=B7=B3=E8=BF=87=E5=8F=82=E8=80=83=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=20pt=20=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3DTank/tools/audit_pt_boundaries.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/3DTank/tools/audit_pt_boundaries.js b/3DTank/tools/audit_pt_boundaries.js index 17092e8..91c1e41 100644 --- a/3DTank/tools/audit_pt_boundaries.js +++ b/3DTank/tools/audit_pt_boundaries.js @@ -233,7 +233,9 @@ function ScanFile(File) { continue; } for (const R of (Decoded && Decoded.Records) || []) { - if (String(R.MethodId) !== PT_METHOD || R.Bad || R.At === undefined || R.Consumed === undefined) continue; + // 注意:不要因为 R.Bad 就跳过——semantic 在同一个 pt 记录上失败,恰恰是我们要审计的对象; + // 只要拿到了 At/BitStart 就独立重解一遍(否则审计会被参考实现的失败“静音”)。 + if (String(R.MethodId) !== PT_METHOD || R.At === undefined || R.BitStart === undefined) continue; const Label = path.basename(path.dirname(File)) + '/' + path.basename(File); AuditPt(Body, R.At + 16, path.basename(File), R.BitStart, Label); }