폼 스크립트 예산
모든 폼 스크립트 평가는 CPU 시간, 메모리, 재귀 깊이, 명령문 및 연산 수, 스크립트가 생성할 수 있는 출력을 다루는 엄격한 예산 아래에서 실행되므로, 폭주 계산이 재계산 패스를 멈추거나 메모리를 소진시킬 수 없습니다
THPDFScriptBudgets
THotPDF.FormScriptBudgets는 EvaluateLoadedFieldJavaScript와 모든 재계산 패스에 적용되는 예산 세트를 보관합니다. THPDFScriptBudgets 레코드는 MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds(wall-clock CPU 제한), MaxValueBytes(값 하나의 상한), MaxTotalValueBytes(누적 메모리), MaxOutputBytes(생성 출력 상한)를 노출합니다. 어느 필드든 0으로 두면 해당 제한이 해제됩니다
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 100;
Budgets.MaxTotalValueBytes:= 1024* 1024;
PDF.FormScriptBudgets:= Budgets;
end;
적용 및 텔레메트리
CPU 상한은 연산과 값 바이트가 누적되는 동안 검사되므로 스크립트가 할당만으로 이를 우회할 수 없습니다. 누적 메모리 예산은 많은 작은 값을 할당하고 버리는 스크립트를 잡아냅니다. 침해는 설명적인 ErrorText로 평가를 실패시키고 결과 레코드는 연산 수와 함께 ElapsedMilliseconds 및 ValueBytes 텔레메트리를 보고합니다
기본 예산은 기존 한계(8192바이트 스크립트, 32 명령문, 깊이 32, 1024 연산, 값당 256 KB)를 유지하고 500 ms CPU 상한, 4 MB 누적 메모리 예산, 64 KB 출력 상한을 추가합니다