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