Skip to content

Horse 3.3.15

Latest

Choose a tag to compare

@regyssilveira regyssilveira released this 20 Oct 16:19
d2bfffa

Correção

Corrige ERangeError no cálculo do hash de headers no FPC quando range checking está ativado. Headers comuns, como Content-Type e Authorization, podiam impedir a extração de headers e as operações do dicionário. Correção integrada no #620.

O DJB2 utiliza agora um intermediário QWord e redução explícita módulo 2³² antes da conversão para DWord. Preserva os hashes anteriores, a equivalência entre maiúsculas/minúsculas ASCII e o contrato de IEqualityComparer<string>, sem desabilitar as verificações de range/overflow e sem introduzir alocações de strings no cálculo.

Proteção contra regressões

  • Adiciona quatro grupos com 63 verificações: hashes conhecidos, chave vazia, equivalência de caixa ASCII, entrada de 4.096 caracteres, inserção/busca/atualização/remoção no dicionário e extração de headers de uma requisição FPC.
  • Os quatro grupos reproduziram o erro antes da correção e passaram integralmente depois dela.
  • O script recompila o teste e as units do Horse com -B -Cr -Co; o programa recusa compilação sem range e overflow checking ativados.
  • A regressão passa a integrar os jobs de FPC estável e FPC trunk no GitHub Actions, em configurações padrão e Epoll.

Validação

  • Versão preparada 3.3.15: FPC 3.2.2/Linux x86_64, padrão e Epoll, 63 verificações por configuração, zero falhas e nenhum vazamento reportado pelo heaptrc.

  • Delphi 13 Florence, padrão: 91 testes de parâmetros e API HTTP, sem falhas ou erros.

  • HORSE_VERSION e THorse.Version conferidos como 3.3.15 no Delphi 10 Seattle, Delphi 13 Florence e FPC 3.2.2.

  • No FPC 3.2.2/Linux x86_64, a falha foi reproduzida com -Cr e com -Cr -Co; apenas -Co não provocou a exceção observada.

  • GitHub Actions da versão (#621): os checks test e fpc-trunk-keepalive passaram, incluindo a regressão de hash no FPC estável e no trunk. Execução: https://github.com/HashLoad/horse/actions/runs/39455854727.

Os testes FPC de hash exercitam diretamente as classes, sem abrir servidor HTTP. A validação HTTP foi realizada em Delphi. A mudança de implementação é exclusiva do caminho FPC.

Comparação: 3.3.14...3.3.15