来源: flash-review 全仓扫描的人工归纳(非自动开单)。个案见 #1344(zhenmai_v2)、#1490(overload)。
问题
MeridianChannelId::to_meridian_id() 对非人形 channel(如 tail_fin_channel)合法返回 None —— 这是文档明示的契约,调用方必须显式处理。但全仓 17 个调用点里,6 个直接 unwrap_or_else(|| panic!(...)):
| 文件 |
行 |
已开 issue |
server/src/combat/zhenmai_v2.rs |
1381 |
#1344 |
server/src/cultivation/overload.rs |
119 |
#1490 |
server/src/combat/baomai_v4/crack_reading.rs |
166 |
未报 |
server/src/cultivation/dugu.rs |
548 |
未报 |
server/src/cultivation/qi_zero_decay.rs |
121 |
未报 |
server/src/cultivation/tribulation.rs |
4074 |
未报 |
六处形状完全一致,都是 to_meridian_id().unwrap_or_else(|| panic!(...))。
可达性
玩家用 /race set whale 变成非人形后,已打通经脉即为 whale channel(无 legacy MeridianId 映射),随后触碰上述任一路径(炸炉、渡劫、真元归零衰减、毒蛊、裂读、爆脉)都会 panic 崩服。
/race 本身没有权限门禁 —— 见汇总 issue #1862(42 个 dev 命令里 41 个对任意玩家开放)。两个系统性缺陷叠加:任意玩家可自助把自己变成非人形,然后崩服。
建议修法
不要逐个把 panic! 换成 return——那只是把崩服变成静默失效。契约层面收口:
- 让
to_meridian_id() 的返回类型在调用点强制处理(现已是 Option,问题在调用方图省事)
- 为「非人形实体走 legacy 经脉路径」定义一个明确语义:跳过、降级到通用 channel、或返回
Err 让上层决定
- 六处统一按该语义改写,并补一个非人形回归测试覆盖全部六条路径
只修 #1344/#1490 会留下 4 个同样能崩服的入口。
来源: flash-review 全仓扫描的人工归纳(非自动开单)。个案见 #1344(zhenmai_v2)、#1490(overload)。
问题
MeridianChannelId::to_meridian_id()对非人形 channel(如tail_fin_channel)合法返回None—— 这是文档明示的契约,调用方必须显式处理。但全仓 17 个调用点里,6 个直接unwrap_or_else(|| panic!(...)):server/src/combat/zhenmai_v2.rsserver/src/cultivation/overload.rsserver/src/combat/baomai_v4/crack_reading.rsserver/src/cultivation/dugu.rsserver/src/cultivation/qi_zero_decay.rsserver/src/cultivation/tribulation.rs六处形状完全一致,都是
to_meridian_id().unwrap_or_else(|| panic!(...))。可达性
玩家用
/race set whale变成非人形后,已打通经脉即为 whale channel(无 legacyMeridianId映射),随后触碰上述任一路径(炸炉、渡劫、真元归零衰减、毒蛊、裂读、爆脉)都会 panic 崩服。/race本身没有权限门禁 —— 见汇总 issue #1862(42 个 dev 命令里 41 个对任意玩家开放)。两个系统性缺陷叠加:任意玩家可自助把自己变成非人形,然后崩服。建议修法
不要逐个把
panic!换成return——那只是把崩服变成静默失效。契约层面收口:to_meridian_id()的返回类型在调用点强制处理(现已是Option,问题在调用方图省事)Err让上层决定只修 #1344/#1490 会留下 4 个同样能崩服的入口。