Budgetter for formularscripts

Hver evaluering af formularscript kører under strenge budgetter, der dækker CPU-tid, hukommelse, rekursionsdybde, antal sætninger og operationer samt det output et script kan generere, så en løbsk beregning aldrig kan standse en genberegningspassage eller udtømme hukommelsen

THPDFScriptBudgets

THotPDF.FormScriptBudgets indeholder budgettet, der anvendes af EvaluateLoadedFieldJavaScript og hver genberegningspassage. Posten THPDFScriptBudgets eksponerer MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (CPU-afskæring efter vægur), MaxValueBytes (grænse for enkeltværdi), MaxTotalValueBytes (kumulativ hukommelse) og MaxOutputBytes (grænse for genereret output); nul i et felt ophæver den specifikke grænse

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

Håndhævelse og telemetri

CPU-afskæringen kontrolleres, mens operationer og værdibytes akkumuleres, så scripts ikke kan omgå den kun gennem allokering; det kumulative hukommelsesbudget fanger scripts, der allokerer og kasserer mange små værdier. Et brud fejler evalueringen med en beskrivende ErrorText, og resultatposten rapporterer telemetri for ElapsedMilliseconds og ValueBytes sammen med operationsantallet

Standardbudgetterne bevarer de historiske grænser (scripts på 8192 byte, 32 sætninger, dybde 32, 1024 operationer, 256 KB pr. værdi) og tilføjer en CPU-afskæring på 500 ms, et kumulativt hukommelsesbudget på 4 MB og et outputloft på 64 KB