Budgetar för formulärskript

Varje skriptutvärdering för formulär körs under stränga budgetar som täcker CPU-tid, minne, rekursionsdjup, antal satser och operationer samt den utdata ett skript får generera, så att en felande beräkning aldrig kan stoppa en omberäkningspass eller tömma minnet

THPDFScriptBudgets

THotPDF.FormScriptBudgets innehåller den budgetuppsättning som tillämpas av EvaluateLoadedFieldJavaScript och av varje omberäkningspass. Posten THPDFScriptBudgets exponerar MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (väggklocka-CPU-gräns), MaxValueBytes (lock per enskilt värde), MaxTotalValueBytes (kumulativt minne) och MaxOutputBytes (lock för genererad utdata); noll i något fält lyfter just den specifika gränsen

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

Tillämpning och telemetri

CPU-gränsen kontrolleras medan operationer och värdebyte ackumuleras, så skript kan inte kringgå den genom enbart allokering; den kumulativa minnesbudgeten fångar skript som allokerar och kastar bort många små värden. Ett brott misslyckas med utvärderingen med en beskrivande ErrorText, och resultatposten rapporterar ElapsedMilliseconds- och ValueBytes-telemetri tillsammans med antalet operationer

Standardbudgetarna behåller de historiska gränserna (skript på 8192 byte, 32 satser, djup 32, 1024 operationer, 256 KB per värde) och lägger till en CPU-gräns på 500 ms, en kumulativ minnesbudget på 4 MB och ett utdata-boklock på 64 KB