Funções de minimização de corpus
function HPDFMinimizeCorpusCase(const Input: TBytes;
const Predicate: THPDFFailurePredicate; MaximumAttempts: Integer;
out AInfo: THPDFCorpusMinimizationInfo): TBytes;
O redutor primeiro remove extensões completas de objetos indiretos e depois aplica reduções de intervalo de bytes progressivamente menores
Um candidato é aceito apenas quando o predicado ainda relata a assinatura de falha original
AInfo relata tentativas, reduções aceitas, extensões de objetos removidas, intervalos de bytes removidos, tamanhos original e final e a assinatura preservada
Armazenamento contínuo de corpus
function HPDFDefaultCorpusStoreOptions: THPDFCorpusStoreOptions;
function HPDFMinimizeAndStoreCorpusCase(const Input: TBytes;
const Predicate: THPDFFailurePredicate;
const CorpusDirectory: string;
const Options: THPDFCorpusStoreOptions;
out AInfo: THPDFCorpusCaseInfo): Boolean;
function HPDFCorpusCaseInfoToJSON(
const AInfo: THPDFCorpusCaseInfo): AnsiString;
type
THPDFCorpusStoreAction = (csaAdded, csaReplaced, csaKeptExisting);
THPDFCorpusStoreOptions = record
MaximumAttempts: Integer;
MaximumInputBytes: Int64;
MaximumStoredBytes: Int64;
LockRetryCount: Integer;
end;
O armazenamento deriva um ID de caso estável do resumo SHA-256 da assinatura de falha, revalida qualquer caso existente, minimiza os candidatos existente e recebido e mantém o menor resultado
Um bloqueio entre processos serializa decisões para um diretório de corpus, enquanto arquivos temporários com gravação direta e substituição atômica impedem que leitores observem arquivos PDF ou de metadados parciais
THPDFCorpusStoreOptions limita tentativas de minimização, bytes recebidos, bytes armazenados e novas tentativas de bloqueio, e THPDFCorpusCaseInfo.Action relata se o caso foi adicionado, substituído ou mantido
O esquema auxiliar hotpdf.corpus.case.v1 registra o ID do caso, a assinatura de falha exata, o SHA-256 do conteúdo e a contagem de bytes armazenados em ordem estável de campos
HPDFCompareRegressionResultsDeterministic compara assinaturas repetidas entre mecanismos nos domínios de análise, renderização, texto e salvamento e rejeita execuções instáveis ou com falha