Presupuestos de scripts de formularios

Cada evaluación de script de formulario se ejecuta bajo presupuestos estrictos que cubren el tiempo de CPU, la memoria, la profundidad de recursión, los recuentos de sentencias y operaciones y la salida que un script puede generar, de modo que un cálculo descontrolado nunca pueda detener una pasada de recálculo ni agotar la memoria

THPDFScriptBudgets

THotPDF.FormScriptBudgets contiene el conjunto de presupuestos aplicado por EvaluateLoadedFieldJavaScript y por cada pasada de recálculo. El registro THPDFScriptBudgets expone MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (corte de CPU de tiempo real), MaxValueBytes (límite de valor único), MaxTotalValueBytes (memoria acumulada) y MaxOutputBytes (límite de salida generada); cero en cualquier campo elimina 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, de modo que los scripts no puedan evitarlo solo mediante asignación; el presupuesto de memoria acumulada detecta scripts que asignan y descartan muchos valores pequeños. Una infracción hace fallar la evaluación con un ErrorText descriptivo y el registro de resultado informa de la telemetría de ElapsedMilliseconds y ValueBytes junto con el recuento de operaciones

Los presupuestos predeterminados conservan los límites históricos (scripts de 8192 bytes, 32 sentencias, 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 límite de salida de 64 KB