Bugete pentru scripturi de formulare
Fiecare evaluare de script de formular rulează sub bugete stricte care acoperă timpul CPU, memoria, adâncimea de recursie, numărătorile de instrucțiuni și operații și ieșirea pe care un script o poate genera, astfel încât un calcul scăpat de sub control nu poate niciodată bloca o trecere de recalculare sau epuiza memoria
THPDFScriptBudgets
THotPDF.FormScriptBudgets deține setul de bugete aplicat de EvaluateLoadedFieldJavaScript și de fiecare trecere de recalculare. Înregistrarea THPDFScriptBudgets expune MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (limită CPU de tip wall-clock), MaxValueBytes (plafon per valoare), MaxTotalValueBytes (memorie cumulativă) și MaxOutputBytes (plafon de ieșire generată); zero în orice câmp ridică acea limită specifică
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 100;
Budgets.MaxTotalValueBytes:= 1024* 1024;
PDF.FormScriptBudgets:= Budgets;
end;
Aplicare și telemetrie
Limita CPU este verificată în timp ce operațiile și octeții de valoare se acumulează, astfel încât scripturile nu o pot ocoli doar prin alocare; bugetul cumulativ de memorie prinde scripturile care alocă și aruncă multe valori mici. O încălcare eșuează evaluarea cu un ErrorText descriptiv, iar înregistrarea de rezultat raportează telemetria ElapsedMilliseconds și ValueBytes alături de numărul de operații
Bugetele implicite păstrează limitele istorice (scripturi de 8192 de octeți, 32 de instrucțiuni, adâncime 32, 1024 de operații, 256 KB per valoare) și adaugă o limită CPU de 500 ms, un buget cumulativ de memorie de 4 MB și un plafon de ieșire de 64 KB