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