Ограничения бюджета парсера PDF

Бюджеты парсера в рамках документа останавливают враждебный или повреждённый ввод до того, как построение токенов, суммарная работа с токенами, рост массива или словаря либо повторяющиеся повреждённые токены израсходуют чрезмерные ресурсы

Значения по умолчанию для совместимости

Установка любого лимита в ноль отключает этот конкретный лимит

Отрицательные значения вызывают 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