Budgets des scripts de formulaire

Chaque évaluation de script de formulaire s’exécute sous des budgets stricts couvrant le temps processeur, la mémoire, la profondeur de récursion, le nombre d’instructions et d’opérations, ainsi que la sortie qu’un script peut produire, de sorte qu’un calcul incontrôlé ne puisse ni bloquer une passe de recalcul ni épuiser la mémoire

THPDFScriptBudgets

THotPDF.FormScriptBudgets contient le jeu de budgets appliqué par EvaluateLoadedFieldJavaScript et par chaque passe de recalcul. Le record THPDFScriptBudgets expose MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (coupure CPU en temps réel), MaxValueBytes (plafond par valeur), MaxTotalValueBytes (mémoire cumulée) et MaxOutputBytes (plafond de la sortie générée) ; la valeur zéro dans un champ lève cette limite précise

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

Application et télémétrie

La limite processeur est vérifiée pendant l’accumulation des opérations et octets de valeur, afin que les scripts ne puissent pas la contourner par allocation seule ; le budget mémoire cumulatif détecte les scripts qui allouent puis abandonnent de nombreuses petites valeurs. Un dépassement fait échouer l’évaluation avec un ErrorText descriptif et l’enregistrement de résultat indique la télémétrie ElapsedMilliseconds et ValueBytes en plus du nombre d’opérations

Les budgets par défaut conservent les limites historiques (scripts de 8192 octets, 32 instructions, profondeur 32, 1024 opérations, 256 Ko par valeur) et ajoutent une limite processeur de 500 ms, un budget mémoire cumulatif de 4 Mo et un plafond de sortie de 64 Ko