THotPDF.DecodeBudgetBytes-eigenschap
Stelt het maximale samengevoegde aantal bytes in dat wordt geaccepteerd van alle decoderingsfasen in één PDF-stroomfilterketen
Declaraties
// Delphi
property DecodeBudgetBytes: Int64;
function GetLastDecodeBudgetInfo(
out AInfo: THPDFDecodeBudgetInfo): Boolean;
// C++Builder
__property __int64 DecodeBudgetBytes;
bool __fastcall GetLastDecodeBudgetInfo(
THPDFDecodeBudgetInfo &AInfo);
Standaard
268435456 bytes, of 256 MiB
Samengevoegde boekhouding
Elke generieke filter schrijft via een begrensde stroom voordat gegevens de backing-geheugenstroom bereiken
- Een keten zoals
[/ASCII85Decode /FlateDecode]verbruikt de ASCII85-uitvoer plus de Flate-uitvoer uit één gedeeld budget - Ondersteunde generieke filters zijn
FlateDecode,LZWDecode,ASCIIHexDecode,ASCII85DecodeenRunLengthDecode, inclusief hun PDF-afkortingen - Beeldpredictor-uitvoer deelt hetzelfde budget als de voorafgaande generieke beeldfilters
- De oorspronkelijke gecodeerde invoer wordt niet in rekening gebracht omdat het budget expansie meet die door decodering wordt geproduceerd
- Elke onafhankelijke stroomketen start met een vers per-keten-budget terwijl
DocumentDecodeBudgetByteshet afzonderlijke documentbrede plafond levert
Diagnostiek
GetLastDecodeBudgetInfo retourneert de nieuwste ketenlimiet, geaccepteerde gedecodeerde bytes, grootste fase, filteraantal, limietstatus en het filter dat de limiet overschreed
THPDFDecodeBudgetInfo = record
LimitBytes: Int64;
DecodedBytes: Int64;
PeakStageBytes: Int64;
FilterCount: Integer;
Exceeded: Boolean;
ExceededFilter: AnsiString;
end;
De methode retourneert False totdat ten minste één filter door de documentinstantie is gedecodeerd
Foutgedrag
Lagewaarde-decodering genereert EHPDFDecodeBudgetError wanneer een fase het samengevoegde budget overschrijdt; hoogwaardige leesmethoden die al falen rapporteren via False of nil behouden dat contract terwijl GetLastDecodeBudgetInfo de reden blootlegt
Stel DecodeBudgetBytes alleen in op nul voor vertrouwde invoer die onbeperkte per-keten-expansie vereist; negatieve waarden genereren ERangeError
Delphi-voorbeeld
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-voorbeeld
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);
}