Presupuestos de scripts de formulario

Cada evaluación de form-script corre bajo presupuestos estrictos que cubren tiempo de CPU, memoria, profundidad de recursión, conteos de statements y operaciones, y la salida que un script puede generar, así que un cálculo desbocado jamás puede atascar una pasada de recálculación ni agotar la memoria

THPDFScriptBudgets

THotPDF.FormScriptBudgets contiene el conjunto de presupuestos aplicado por EvaluateLoadedFieldJavaScript y por cada pasada de recálculación. El record THPDFScriptBudgets expone MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (corte de CPU en wall-clock), MaxValueBytes (tope por valor único), MaxTotalValueBytes (memoria acumulada) y MaxOutputBytes (tope de salida generada); un cero en cualquier campo levanta ese límite específico

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

Aplicación y telemetría

El corte de CPU se comprueba mientras se acumulan operaciones y bytes de valor, así que los scripts no pueden eludirlo solo con asignación; el presupuesto de memoria acumulada atrapa a los scripts que asignan y descartan muchos valores pequeños. Una violación falla la evaluación con un ErrorText descriptivo y el record de resultado reporta la telemetría de ElapsedMilliseconds y ValueBytes junto con el conteo de operaciones

Los presupuestos por defecto conservan los límites históricos (scripts de 8192 bytes, 32 statements, profundidad 32, 1024 operaciones, 256 KB por valor) y añaden un corte de CPU de 500 ms, un presupuesto de memoria acumulada de 4 MB y un tope de salida de 64 KB