THotPDF.DecodeBudgetBytes Property

Asettaa maksimimäärän yhdistettyjä tavuja, jotka hyväksytään kaikista yhden PDF-virtasuodinketjun dekoodausvaiheista

Määrittelyt

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

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

Oletus

268435456 tavua eli 256 MiB

Yhdistetty kirjanpito

Jokainen yleissuodatin kirjoittaa rajatun virran läpi ennen kuin tiedot saavuttavat taustana toimivan muistivirran

Diagnostiikka

GetLastDecodeBudgetInfo palauttaa viimeisimmän ketjurajan, hyväksytyt dekoodatut tavut, suurimman vaiheen, suodatinmäärän, rajatilan ja suodattimen, joka ylitti rajan

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

Menetelmä palauttaa False, kunnes asiakirjaesiintymä on dekoodannut vähintään yhden suodattimen

Virhetila

Matalan tason dekoodaus nostaa poikkeuksen EHPDFDecodeBudgetError, kun vaihe ylittää yhdistetyn budjetin; korkean tason lukumenetelmät, jotka jo ilmoittavat virheestä arvoilla False tai nil, säilyttävät sopimuksensa, kun taas GetLastDecodeBudgetInfo paljastaa syyn

Aseta DecodeBudgetBytes nollaan vain luotettaville syötteille, jotka vaativat rajoittamatonta ketjukohtaista laajenemista; negatiiviset arvot nostavat poikkeuksen ERangeError

Delphi-esimerkki

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-esimerkki

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);
}

Aiheeseen liittyvät API:t