Ограничения бюджета парсера 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 возвращает значения по умолчанию для совместимости
Сбои и телеметрия
При превышении лимита возникает EHPDFParserBudgetExceeded со значениями Limit, Observed и Maximum
THPDFParserBudgetLimit указывает, какой лимит превышен: pblTokenBytes, pblTotalTokens, pblContainerItems или pblBadTokens
GetLastParserBudgetStatistics возвращает снимок THPDFParserBudgetStatistics с настроенными лимитами, счётчиками токенов и повреждённых токенов, пиковыми размерами токенов и контейнеров, информацией о превышениях и признаком валидности сессии
Исключения бюджета остаются фатальными и в современном парсинге, и в традиционном, и при восстановлении перекрёстных ссылок, и при пообъектной изоляции сбоев
Проверка производительности
Регрессионная проверка Win32 отклоняет токен в 2 MiB за 215 мс при пике процесса 34,476,032 байт и контейнер из миллиона токенов за 199 мс при пике 36,839,424 байт
См. также: ApplyStrictParserBudgetPolicy, ResetParserBudgetPolicy, GetLastParserBudgetStatistics, Scalable Loading