有界 PDF 解析器预算
文档范围的解析器预算在令牌构造、聚合令牌工作、数组或字典增长或重复畸形令牌消耗过多资源之前阻止恶意或损坏的输入
兼容性默认值
ParserMaxTokenBytes默认为 67,108,864 字节ParserMaxTotalTokens默认为每次加载 10,000,000 个令牌ParserMaxContainerItems默认为每个数组或字典 1,000,000 个条目ParserMaxBadTokens默认为每次加载 64 个畸形令牌
将任何限制设为零以禁用该单独限制
负值抛出 ERangeError
严格策略
ApplyStrictParserBudgetPolicy 选择 1 MiB 令牌限制、100,000 个总令牌、10,000 个容器条目和 8 个畸形令牌
PDF.ApplyStrictParserBudgetPolicy;
try
PDF.LoadFromFile(UntrustedFileName);
except
on E: EHPDFParserBudgetExceeded do
LogParserRejection(E.Limit, E.Observed, E.Maximum);
end;
ResetParserBudgetPolicy 恢复兼容性默认值
失败与遥测
超出的限制抛出带 Limit、Observed 和 Maximum 值的 EHPDFParserBudgetExceeded
THPDFParserBudgetLimit 标识 pblTokenBytes、pblTotalTokens、pblContainerItems 或 pblBadTokens
GetLastParserBudgetStatistics 返回带配置限制、令牌和畸形令牌计数、峰值令牌和容器大小、违规信息以及会话有效性的 THPDFParserBudgetStatistics 快照
预算异常在现代解析、传统解析、交叉引用恢复和每对象失败隔离中保持终结性
性能门槛
Win32 回归门槛在 34,476,032 字节进程峰值下于 215 ms 拒绝 2 MiB 令牌,并在 36,839,424 字节进程峰值下于 199 ms 拒绝一百万个令牌的容器
另请参阅: ApplyStrictParserBudgetPolicy、ResetParserBudgetPolicy、GetLastParserBudgetStatistics、可扩展加载