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