Form Script Budgets

Každé vyhodnotenie skriptu formulára beží pod prísnymi rozpočtami pokrývajúcimi čas CPU, pamäť, hĺbku rekurzie, počty príkazov a operácií a výstup, ktorý môže skript generovať, takže nekontrolovaný výpočet nikdy nemôže zastaviť prechod prepočtu ani vyčerpať pamäť

THPDFScriptBudgets

THotPDF.FormScriptBudgets drží sadu rozpočtov aplikovanú funkciou EvaluateLoadedFieldJavaScript a každým prechodom prepočtu. Záznam THPDFScriptBudgets vystavuje MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (odpojenie CPU podľa stenných hodín), MaxValueBytes (strop jednej hodnoty), MaxTotalValueBytes (kumulatívna pamäť) a MaxOutputBytes (strop generovaného výstupu); nula v ktoromkoľvek poli odstraňuje tento konkrétny limit

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

Presadzovanie a telemetria

Odpojenie CPU sa kontroluje, kým sa akumulujú operácie a bajty hodnôt, takže skripty ho nemôžu obísť samotným prideľovaním; kumulatívny rozpočet pamäte zachytáva skripty, ktoré prideľujú a zahadzujú mnoho malých hodnôt. Porušenie zlyhá pri vyhodnotení s opisným ErrorText a záznam výsledku hlási telemetriu ElapsedMilliseconds a ValueBytes vedľa počtu operácií

Predvolené rozpočty zachovávajú historické limity (skripty 8192 bajtov, 32 príkazov, hĺbka 32, 1024 operácií, 256 KB na hodnotu) a pridávajú odpojenie CPU 500 ms, kumulatívny rozpočet pamäte 4 MB a strop výstupu 64 KB