바운딩된 PDF 파서 예산
문서 범위 파서 예산은 토큰 구성, 집계 토큰 작업, 배열 또는 사전 증가 또는 반복되는 잘못된 토큰이 과도한 리소스를 소비하기 전에 적대적이거나 손상된 입력을 중지합니다
호환성 기본값
ParserMaxTokenBytes는 기본적으로 67,108,864바이트입니다ParserMaxTotalTokens는 로드당 기본적으로 10,000,000개 토큰입니다ParserMaxContainerItems는 배열 또는 사전당 기본적으로 1,000,000개 항목입니다ParserMaxBadTokens는 로드당 기본적으로 64개 잘못된 토큰입니다
개별 제한을 비활성화하려면 해당 제한을 0으로 설정합니다
음수 값은 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바이트 프로세스 최대값에서 215ms 안에 2 MiB 토큰을 거부하고, 36,839,424바이트 프로세스 최대값에서 199ms 안에 백만 토큰 컨테이너를 거부합니다
추가 정보: ApplyStrictParserBudgetPolicy, ResetParserBudgetPolicy, GetLastParserBudgetStatistics, 확장 가능한 로딩