Proprietatea THotPDF.DecodeBudgetBytes

Setează numărul maxim agregat de octeți acceptați de la toate etapele de decodare într-un lanț de filtre de flux PDF

Declarații

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

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

Implicit

268435456 octeți, adică 256 MiB

Contabilitate agregată

Fiecare filtru generic scrie printr-un flux limitat înainte ca datele să ajungă la fluxul său de memorie suport

Diagnosticare

GetLastDecodeBudgetInfo returnează limita celui mai recent lanț, octeții decodificați acceptați, cea mai mare etapă, numărul de filtre, starea limitei și filtrul care a depășit limita

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

Metoda returnează False până când cel puțin un filtru a fost decodificat de instanța documentului

Comportament la eșec

Decodarea la nivel inferior ridică EHPDFDecodeBudgetError atunci când o etapă depășește bugetul agregat; metodele de citire la nivel superior care raportează deja eșecul prin False sau nil păstrează acel contract, în timp ce GetLastDecodeBudgetInfo expune motivul

Setați DecodeBudgetBytes la zero doar pentru intrări de încredere care necesită expansiune nelimitată per-lanț; valorile negative ridică ERangeError

Exemplu Delphi

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

Exemplu C++Builder

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

API-uri corelate