Orçamentos de script de formulário

Toda avaliação de script de formulário é executada sob orçamentos rígidos que cobrem tempo de CPU, memória, profundidade de recursão, contagens de instruções e operações e a saída que um script pode gerar, de modo que um cálculo descontrolado nunca possa travar uma passagem de recálculo nem esgotar a memória

THPDFScriptBudgets

THotPDF.FormScriptBudgets mantém o conjunto de orçamentos aplicado por EvaluateLoadedFieldJavaScript e por toda passagem de recálculo. O registro THPDFScriptBudgets expõe MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (limite de CPU por relógio de parede), MaxValueBytes (limite por valor), MaxTotalValueBytes (memória cumulativa) e MaxOutputBytes (limite de saída gerada); zero em qualquer campo remove aquele limite específico

var
  Budgets: THPDFScriptBudgets;
begin
  Budgets:= PDF.FormScriptBudgets;
  Budgets.MaxElapsedMilliseconds:= 100;
  Budgets.MaxTotalValueBytes:= 1024* 1024;
  PDF.FormScriptBudgets:= Budgets;
end;

Imposição e telemetria

O limite de CPU é verificado enquanto operações e bytes de valor se acumulam, de modo que os scripts não possam contorná-lo apenas por alocação; o orçamento de memória cumulativa captura scripts que alocam e descartam muitos valores pequenos. Uma violação falha a avaliação com um ErrorText descritivo e o registro de resultado relata a telemetria de ElapsedMilliseconds e ValueBytes junto com a contagem de operações

Os orçamentos padrão mantêm os limites históricos (scripts de 8192 bytes, 32 instruções, profundidade 32, 1024 operações, 256 KB por valor) e adicionam um limite de CPU de 500 ms, um orçamento de memória cumulativa de 4 MB e um limite de saída de 64 KB