Binary decoder returns incorrect data after short stream reads

Fechada
#56 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

  • #57 de @sylvesterkaczmarek — fechado sem integrar

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
76/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
java
Domínio
backend

Direção de pesquisa

Comece em BaseBinaryInputReader.checkBuffer() e reproduza o problema com o exemplo fornecido de FixedBinaryDecoder e ByteArrayInputStream fragmentado. Rastreie directGetBytes() para a entrada de array de bytes e o tratamento de MALException. Está concluído quando as leituras fragmentadas acumulam os bytes solicitados, streams ou buffers insuficientes lançam MALException e inteiros, strings e blocos de bytes não contêm mais dados incorretos ou preenchidos.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

On master 028751ad, BaseBinaryInputReader.checkBuffer() performs only one stream read before allowing decoding. A valid short read leaves part of the requested value unfilled, so the decoder can silently return incorrect data.

InputStream input = new ByteArrayInputStream(new byte[]{1, 35, 69, 103}) {
    @Override
    public synchronized int read(byte[] buffer, int offset, int length) {
        return super.read(buffer, offset, Math.min(length, 1));
    }
};
new FixedBinaryDecoder(input, null, false).decodeInteger();

Expected: 0x01234567 (19088743). Actual: 0x01000000 (16777216).

Strings and byte blocks also contain incorrect bytes after fragmented reads. With byte-array input, checkBuffer() does not verify the readable length, so directGetBytes() can silently pad truncated input with zeros or decode unused buffer capacity.

The reader should accumulate enough bytes before decoding and throw MALException when the stream or buffer cannot satisfy the requested length.

Linguagem predominante
Java
Estrelas
17
Forks
10
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de esa/mo-services-java

Todas as issues de esa/mo-services-java

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.