有界 PDF 解析器預算
文件範圍的解析器預算會在 token 建構、彙總 token 工作、陣列或字典成長、或重複的畸形 token 消耗過多資源之前,擋下惡意或損毀的輸入
相容性預設值
ParserMaxTokenBytes預設為 67,108,864 位元組ParserMaxTotalTokens預設為每次載入 10,000,000 個 tokenParserMaxContainerItems預設為每個陣列或字典 1,000,000 個項目ParserMaxBadTokens預設為每次載入 64 個畸形 token
把任一上限設為 0 可停用該項限制
負值會丟出 ERangeError
嚴格原則
ApplyStrictParserBudgetPolicy 選用 1 MiB token 上限、100,000 總 token 數、10,000 容器項目與 8 個畸形 token
PDF.ApplyStrictParserBudgetPolicy;
try
PDF.LoadFromFile(UntrustedFileName);
except
on E: EHPDFParserBudgetExceeded do
LogParserRejection(E.Limit, E.Observed, E.Maximum);
end;
ResetParserBudgetPolicy 還原相容性預設值
失敗與遙測
上限被突破時丟出 EHPDFParserBudgetExceeded,附 Limit、Observed 與 Maximum 值
THPDFParserBudgetLimit 標示 pblTokenBytes、pblTotalTokens、pblContainerItems 或 pblBadTokens
GetLastParserBudgetStatistics 回傳 THPDFParserBudgetStatistics 快照,包含設定的上限、token 與畸形 token 數量、峰值 token 與容器大小、突破資訊與工作階段有效性
預算例外在現代解析、傳統解析、交叉參考復原與逐物件失敗隔離之間都視為終結
效能閘
Win32 回歸閘在程序峰值 34,476,032 位元組下於 215 ms 內拒絕 2 MiB token,在程序峰值 36,839,424 位元組下於 199 ms 內拒絕百萬 token 容器
另請參閱: ApplyStrictParserBudgetPolicy, ResetParserBudgetPolicy, GetLastParserBudgetStatistics, 可擴充載入