Budżety skryptów formularza
Każda ocena skryptu formularza działa pod ścisłymi budżetami obejmującymi czas CPU, pamięć, głębokość rekurencji, liczbę instrukcji i operacji oraz wyjście, które skrypt może generować, więc niekontrolowane obliczenie nigdy nie może zablokować przebiegu przeliczania ani wyczerpać pamięci
THPDFScriptBudgets
THotPDF.FormScriptBudgets przechowuje zestaw budżetów stosowanych przez EvaluateLoadedFieldJavaScript i przez każdy przebieg przeliczania. Rekord THPDFScriptBudgets wystawia MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (odcięcie CPU wg czasu ściennego), MaxValueBytes (limit pojedynczej wartości), MaxTotalValueBytes (skumulowana pamięć) i MaxOutputBytes (limit generowanego wyjścia); zero w dowolnym polu zdejmuje ten konkretny limit
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 100;
Budgets.MaxTotalValueBytes:= 1024* 1024;
PDF.FormScriptBudgets:= Budgets;
end;
Egzekwowanie i telemetria
Odcięcie CPU jest sprawdzane, gdy gromadzą się operacje i bajty wartości, więc skrypty nie mogą go ominąć samą alokacją; skumulowany budżet pamięci wyłapuje skrypty, które alokują i odrzucają wiele małych wartości. Naruszenie nieudolnie kończy ocenę z opisowym ErrorText, a rekord wyniku raportuje telemetrię ElapsedMilliseconds i ValueBytes obok liczby operacji
Domyślne budżety zachowują historyczne limity (skrypty 8192 bajtów, 32 instrukcje, głębokość 32, 1024 operacje, 256 KB na wartość) oraz dodają odcięcie CPU 500 ms, skumulowany budżet pamięci 4 MB i limit wyjścia 64 KB