Budget degli Script dei Moduli
Ogni valutazione di script dei moduli viene eseguita sotto budget rigorosi che coprono tempo CPU, memoria, profondità di ricorsione, conteggi di istruzioni e operazioni e l'output che uno script può generare, così un calcolo fuori controllo non può mai bloccare un passaggio di ricalcolo o esaurire la memoria
THPDFScriptBudgets
THotPDF.FormScriptBudgets contiene il set di budget applicato da EvaluateLoadedFieldJavaScript e da ogni passaggio di ricalcolo. Il record THPDFScriptBudgets espone MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (cutoff CPU a tempo di parete), MaxValueBytes (limite per singolo valore), MaxTotalValueBytes (memoria cumulativa) e MaxOutputBytes (limite di output generato); zero in qualsiasi campo solleva quel limite specifico
var
Budgets: THPDFScriptBudgets;
begin
Budgets:= PDF.FormScriptBudgets;
Budgets.MaxElapsedMilliseconds:= 100;
Budgets.MaxTotalValueBytes:= 1024* 1024;
PDF.FormScriptBudgets:= Budgets;
end;
Applicazione e telemetria
Il cutoff CPU viene controllato mentre le operazioni e i byte di valore si accumulano, quindi gli script non possono aggirarlo con la sola allocazione; il budget di memoria cumulativa intercetta gli script che allocano e scartano molti piccoli valori. Una violazione fa fallire la valutazione con un ErrorText descrittivo e il record di risultato riporta la telemetria ElapsedMilliseconds e ValueBytes accanto al conteggio delle operazioni
I budget predefiniti mantengono i limiti storici (script da 8192 byte, 32 istruzioni, profondità 32, 1024 operazioni, 256 KB per valore) e aggiungono un cutoff CPU di 500 ms, un budget di memoria cumulativa di 4 MB e un tetto di output di 64 KB