OCR:parse_layout 结果包解析仍漏出原生异常,且 download_url 不限制主机 #37
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
#34 的独立对抗式审查(
research-wiki/reviews/2026-10-22-issue34-branch-review.md§4 M-4 与 I-3)发现两处基线即有的缺口。#34 为保持parse_layout行为不变(医院线在用),只在新增的parse_document路径上做了加固,这两处在parse_layout上没有动。问题 1:
parse_layout的 ZIP 解析路径漏出原生异常parse_layout解析结果包时,外部数据触发的OverflowError/NotImplementedError/RuntimeError(加密成员、未知压缩方法、巨大整数等)不会被归入errors.py四分类,而是以原生异常漏出OcrClient。后果:客户端既不写终态遥测行,也不归还半开探针——违反「错误分类驱动」与「遥测必录」两条库铁律。
parse_document路径(transports/_monkey_document.py)已用统一的外部数据异常边界落ResultInvalidError,可作蓝本。问题 2:
download_url不限制主机/parse第一段响应里的download_url若是绝对地址,transport 会直接去取,不校验主机是否属于该源的base_url。#34 只补了「畸形 URL → 瞬时错误」的校验,没有限制主机(基线接受绝对地址,限制会改变既有行为)。需评估:服务被攻陷或被中间人改写响应时,是否构成 SSRF 面;是否应默认只允许同源,并为合法的跨主机部署(下载走另一个出口)留显式配置。
本 issue 要决定的
parse_layout的 ZIP 路径也收进统一异常边界。这会把原先「漏出原生异常」的输入改归ResultInvalidError,属公共行为变更,但没有已知消费者依赖漏出行为。download_url主机、默认策略、是否可配置。涉及公共承诺,需走 brainstorming。两者都不阻塞 #34 的 1.3.11 发布。