Form Script Budgets

Cada avaliação de script de formulário corre sob orçamentos estritos que cobrem o tempo de CPU, a memória, a profundidade de recursão, as contagens de instruções e de operações e a saída que um script pode gerar, de modo que um cálculo descontrolado nunca consiga bloquear uma passagem de recálculo nem esgotar a memória

THPDFScriptBudgets

THotPDF.FormScriptBudgets guarda o conjunto de orçamentos aplicado por EvaluateLoadedFieldJavaScript e por cada passagem de recálculo. O record THPDFScriptBudgets expõe MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (corte de CPU por wall-clock), MaxValueBytes (limite por valor), MaxTotalValueBytes (memória cumulativa) e MaxOutputBytes (limite da saída gerada); zero em qualquer campo levanta esse limite específico

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

Enforcement and telemetry

O corte de CPU é verificado à medida que as operações e os bytes de valores se acumulam, pelo que os scripts não o conseguem contornar só com alocações; o orçamento de memória cumulativa apanha os scripts que alocam e descartam muitos valores pequenos. Uma violação faz a avaliação falhar com um ErrorText descritivo, e o registo de resultado reporta a telemetria ElapsedMilliseconds e ValueBytes a par da contagem de operações

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