مرجع HotPDF

يعمل كل تقييم لسكربت نموذج تحت ميزانيات صارمة تغطي زمن المعالج ووحدة الذاكرة وعمق الاستدعاء الذاتي (recursion) وعدد العبارات والعمليات والمخرجات التي قد يولّدها السكربت، بحيث لا يمكن أبدًا لحساب هارب (runaway) أن يُعطِّل مرور إعادة الحساب أو يستنفد الذاكرة

THPDFScriptBudgets

يحمل THotPDF.FormScriptBudgets مجموعة الميزانيات المطبَّقة بواسطة EvaluateLoadedFieldJavaScript وكل مرور إعادة حساب. يكشف سجل THPDFScriptBudgets عن MaxScriptLength وMaxStatements وMaxExpressionDepth وMaxOperations وMaxElapsedMilliseconds (سقف زمن معالج بالساعة الحائطية) وMaxValueBytes (سقف قيمة واحدة) وMaxTotalValueBytes (الذاكرة التراكمية) وMaxOutputBytes (سقف المخرجات المولَّدة)؛ ترفع القيمة صفر في أي حقل ذلك الحد المحدَّد

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

الفرض والقياس عن بُعد (Telemetry)

يُتحقَّق من سقف زمن المعالج أثناء تراكم العمليات وبايتات القيم، بحيث لا يمكن للسكربتات تجاوزه بالتخصيص وحده؛ وتلتقط ميزانية الذاكرة التراكمية السكربتات التي تخصّص وتتخلّص من قيم صغيرة كثيرة. يُفشِل الخرق التقييم مع ErrorText وصفي، ويُبلغ سجل النتيجة عن قياسات ElapsedMilliseconds وValueBytes إلى جانب عدد العمليات

تحافظ الميزانيات الافتراضية على الحدود التاريخية (سكربتات بحجم 8192 بايت، و32 عبارة، وعمق 32، و1024 عملية، و256 كيلوبايت لكل قيمة)، وتضيف حدًا زمنيًا للمعالج قدره 500 ملي ثانية، وميزانية ذاكرة تراكمية قدرها 4 ميغابايت، وسقفًا للمخرجات قدره 64 كيلوبايت