フォームスクリプト予算

すべてのフォームスクリプト評価は、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 バイトのスクリプト、32 ステートメント、深さ 32、1024 操作、値ごとに 256 KB)を維持し、500 ms の CPU カットオフ、4 MB の累積メモリ予算、64 KB の出力キャップを追加します