[Parity][map][S2][F] AutomapView 遇到任何异常都用伪造的 3×3 房间 LevelView 继续运行(catch 吞错),伪视图还会进入碰撞回退链 #629

Closed
opened 2026-10-02 11:42:48 +00:00 by troytt · 0 comments
Owner

1.13c 客户端保真度审计立项(基准快照:7bd1090 / main @ 77a20c7)

证据标记说明:V-data = 1.13c MPQ 数据表 (.txt / animdata.d2 / .tbl / pal.pl2);V-src = D2MOO 逆向源码;V-bin = 1.13c DLL 反汇编;K = 1.13c 公认行为。

来源审计项:map#10 — [S2][F] AutomapView 遇到任何异常都用伪造的 3×3 房间 LevelView 继续运行(catch 吞错),伪视图还会进入碰撞回退链

位置:

  • src/client/automap/automap-view.ts:97-198(buildFallbackLevelView):
    • 基准坐标 areaId*32 + seed%16 是凭空构造的。
    • 3×3 个 8×8 房间,全部可走。
  • automap-view.ts:275-277:catch {},注释写 "Fallback to deterministic synthetic LevelView"。
  • automap-view.ts:326-328 和 343-345:吞掉 MapService 的 room 包错误。
  • automap-view.ts:355-372(ensureLevelView):catch { view = buildFallbackLevelView(...) };没有 mapService 时也直接造假。
  • automap-view.ts:523-572(buildMinimapLevel):view.blocked 无效时,默认 cellsX=40 / cellsY=40 / subW=200,并按房间重建网格。
  • src/client/session/online-session.ts:305-314:碰撞检测链最后回退到 this.automapView.getLevelView(),可能拿到上面的伪视图。

原版: 没有对应行为。地图数据缺失就是错误。AGENTS.md §3 禁止静默容错。

影响:

  • 任何 DRLG / bundle 异常(尤其是 'act' 模式一次生成 15-22 个关卡时)都会静默变成一张 3×3 方块地图,不报错。
  • 在碰撞回退链的极端路径上,玩家会按伪造的可走网格移动。

建议: 删除 buildFallbackLevelView 和所有空 catch。ensureLevelView 失败时抛错或进入"未就绪"状态并上报。碰撞链不要回退到 automapView。

已有 issue: —


> **1.13c 客户端保真度审计立项**(基准快照:`7bd1090` / `main @ 77a20c7`) > 证据标记说明:`V-data` = 1.13c MPQ 数据表 (`.txt` / `animdata.d2` / `.tbl` / `pal.pl2`);`V-src` = D2MOO 逆向源码;`V-bin` = 1.13c DLL 反汇编;`K` = 1.13c 公认行为。 ### 来源审计项:`map#10` — [S2][F] AutomapView 遇到任何异常都用伪造的 3×3 房间 LevelView 继续运行(catch 吞错),伪视图还会进入碰撞回退链 **位置:** - `src/client/automap/automap-view.ts:97-198`(`buildFallbackLevelView`): - 基准坐标 `areaId*32 + seed%16` 是凭空构造的。 - 3×3 个 8×8 房间,全部可走。 - `automap-view.ts:275-277`:`catch {}`,注释写 "Fallback to deterministic synthetic LevelView"。 - `automap-view.ts:326-328` 和 `343-345`:吞掉 MapService 的 room 包错误。 - `automap-view.ts:355-372`(`ensureLevelView`):`catch { view = buildFallbackLevelView(...) }`;没有 mapService 时也直接造假。 - `automap-view.ts:523-572`(`buildMinimapLevel`):`view.blocked` 无效时,默认 `cellsX=40 / cellsY=40 / subW=200`,并按房间重建网格。 - `src/client/session/online-session.ts:305-314`:碰撞检测链最后回退到 `this.automapView.getLevelView()`,可能拿到上面的伪视图。 **原版:** 没有对应行为。地图数据缺失就是错误。AGENTS.md §3 禁止静默容错。 **影响:** - 任何 DRLG / bundle 异常(尤其是 'act' 模式一次生成 15-22 个关卡时)都会静默变成一张 3×3 方块地图,不报错。 - 在碰撞回退链的极端路径上,玩家会按伪造的可走网格移动。 **建议:** 删除 `buildFallbackLevelView` 和所有空 catch。`ensureLevelView` 失败时抛错或进入"未就绪"状态并上报。碰撞链不要回退到 automapView。 **已有 issue:** — ---
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#629
No description provided.