Бюджети за формуларни скриптове
Всяка оценка на формулярен скрипт върви под строги бюджети, обхващащи CPU време, памет, дълбочина на рекурсия, брой инструкции и операции и изхода, който скриптът може да генерира, така что избягало от контрол изчисление никога не може да блокира проход за повторно пресмятане или да изтощи паметта
THPDFScriptBudgets
THotPDF.FormScriptBudgets пази набора бюджети, прилаган от EvaluateLoadedFieldJavaScript и от всеки проход за повторно пресмятане. Записът THPDFScriptBudgets излага MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (отсичане по реално CPU време), MaxValueBytes (таван за една стойност), MaxTotalValueBytes (кумулативна памет) и MaxOutputBytes (таван за генериран изход); нула в произволно поле вдига съответния лимит
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 100;
Budgets.MaxTotalValueBytes:= 1024* 1024;
PDF.FormScriptBudgets:= Budgets;
end;
Спазване и телеметрия
Отсичането по CPU се проверява, докато се натрупват операции и байтове на стойности, така че скриптове не могат да го заобиколят само с заделяне; кумулативният бюджет за памет хваща скриптове, които заделят и изхвърлят много малки стойности. Нарушение проваля оценката с описателен ErrorText, а резултатният запис докладва телеметрия ElapsedMilliseconds и ValueBytes заедно с броя операции
Бюджетите по подразбиране запазват историческите лимити (скриптове до 8192 bytes, 32 инструкции, дълбочина 32, 1024 операции, 256 KB на стойност) и добавят отсичане по CPU от 500 ms, кумулативен бюджет за памет от 4 MB и таван за изход от 64 KB