THotPDF.DecodeBudgetBytes savybė

Nustato didžiausią sutelktą baitų skaičių, priimtą iš visų iššifravimo stadijų vienoje PDF srauto filtro grandinėje

Deklaracijos

// Delphi
property DecodeBudgetBytes: Int64;
function GetLastDecodeBudgetInfo(
  out AInfo: THPDFDecodeBudgetInfo): Boolean;

// C++Builder
__property __int64 DecodeBudgetBytes;
bool __fastcall GetLastDecodeBudgetInfo(
  THPDFDecodeBudgetInfo &AInfo);

Numatymas

268435456 baitų, arba 256 MiB

Sutelkta apskaita

Kiekvienas bendrinis filtras rašo per ribotą srautą, kol duomenys pasiekia savo atminties srautą

Diagnostika

GetLastDecodeBudgetInfo grąžina naujausią grandinės limitą, priimtus iššifruotus baitus, didžiausią stadiją, filtrų skaičių, limito būseną ir filtrą, viršijusį limitą

THPDFDecodeBudgetInfo = record
  LimitBytes: Int64;
  DecodedBytes: Int64;
  PeakStageBytes: Int64;
  FilterCount: Integer;
  Exceeded: Boolean;
  ExceededFilter: AnsiString;
end;

Metodas grąžina False, kol bent vienas filtras buvo iššifruotas dokumento egzemplioriaus

Nesėkmės elgsena

Žemo lygio iššifravimas kelia EHPDFDecodeBudgetError, kai stadija viršija sutelktą biudžetą; aukšto lygio skaitymo metodai, kurie jau praneša apie nesėkmę per False arba nil, išlaiko tą kontraktą, o GetLastDecodeBudgetInfo atskleidžia priežastį

DecodeBudgetBytes nustatykite į nulį tik patikimoms įvestims, reikalaujančioms neriboto grandinės išplėtimo; neigiamos reikšmės kelia ERangeError

Delphi pavyzdys

PDF.DecodeBudgetBytes := 64 * 1024 * 1024;
if not PDF.ExtractEmbeddedFileBytes('payload.bin', Bytes) then
  if PDF.GetLastDecodeBudgetInfo(Info) and Info.Exceeded then
    Writeln('Decode limit reached in ', Info.ExceededFilter);

C++Builder pavyzdys

pdf->DecodeBudgetBytes = 64LL * 1024 * 1024;
if (!pdf->ExtractEmbeddedFileBytes("payload.bin", bytes)) {
    THPDFDecodeBudgetInfo info;
    if (pdf->GetLastDecodeBudgetInfo(info) && info.Exceeded)
        ShowMessage("Decode limit reached in " + info.ExceededFilter);
}

Susijusios API