Formos scenarijų biudžetai

Kiekvienas formos scenarijaus vertinimas vykdomas pagal griežtus biudžetus, apimančius CPU laiką, atmintį, rekursijos gylį, teiginių ir operacijų skaičių bei išvestį, kurią scenarijus gali sugeneruoti, todėl nevaldomas skaičiavimas niekada negali sustabdyti perskaičiavimo praėjimo ar išeikvoti atminties

THPDFScriptBudgets

THotPDF.FormScriptBudgets saugo biudžetų rinkinį, kurį taiko EvaluateLoadedFieldJavaScript ir kiekvienas perskaičiavimo praėjimas. THPDFScriptBudgets įrašas atskleidžia MaxScriptLength, MaxStatements, MaxExpressionDepth, MaxOperations, MaxElapsedMilliseconds (sieninio laikrodžio CPU riba), MaxValueBytes (vienos reikšmės riba), MaxTotalValueBytes (kaupiamoji atmintis) ir MaxOutputBytes (generuotos išvesties riba); nulis bet kuriame lauke panaikina tą konkrečią ribą

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

Tikrinimas ir telemetrija

CPU riba tikrinama kaupiant operacijas ir reikšmių baitus, todėl scenarijai negali jos apeiti vien per atminties paskirstymą; kaupiamasis atminties biudžetas pagauta scenarijus, kurie paskirsto ir išmeta daug mažų reikšmių. Ribos pažeidimas nepavykdina įvertinimo aprašomąja ErrorText žinute, o rezultatų įrašas praneša ElapsedMilliseconds ir ValueBytes telemetriją kartu su operacijų skaičiumi

Numatytieji biudžetai išlaiko istorines ribas (8 192 baitų scenarijai, 32 teiginiai, gylis 32, 1 024 operacijos, 256 KB vienai reikšmei) ir prideda 500 ms CPU ribą, 4 MB kaupiamąjį atminties biudžetą ir 64 KB išvesties ribą