Budgets für Formskripte
Jede Auswertung eines Formskripts unterliegt strikten Budgets für CPU-Zeit, Speicher, Rekursionstiefe, Anzahl von Anweisungen und Operationen sowie die von einem Skript erzeugte Ausgabe, sodass eine außer Kontrolle geratene Berechnung keinen Neuberechnungsdurchlauf anhalten oder Speicher erschöpfen kann
THPDFScriptBudgets
THotPDF.FormScriptBudgets enthält den Budgetsatz für EvaluateLoadedFieldJavaScript und jeden Neuberechnungsdurchlauf. Der Record THPDFScriptBudgets stellt MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (CPU-Grenze nach Wanduhr), MaxValueBytes (Grenze eines einzelnen Werts), MaxTotalValueBytes (kumulativer Speicher) und MaxOutputBytes (Grenze erzeugter Ausgabe) bereit; Null hebt jeweils diese bestimmte Grenze auf
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 250;
PDF.FormScriptBudgets:= Budgets;
end;
Durchsetzung und Telemetrie
Die CPU-Grenze wird geprüft, während sich Operationen und Wert-Bytes summieren, also können Skripte sie nicht allein durch Allozierung umgehen; das kumulative Speicherbudget erwischt Skripte, die viele kleine Werte allozieren und wieder verwerfen. Eine Überschreitung lässt die Auswertung mit einem aussagekräftigen ErrorText fehlschlagen, und der Ergebnisrecord meldet neben der Operationsanzahl die Telemetrie aus ElapsedMilliseconds und ValueBytes
Eine Budgetüberschreitung beendet nur die betreffende Skriptauswertung und liefert eine Diagnose, ohne bereits bestätigte Feldwerte zu veröffentlichen