Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Preserve JSONRPC request IDs and correctly parse bounded multi-header frames

Aberta
#532 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
rust
Domínio
api, backend, testing

Direção de pesquisa

Read request dispatch and framing in crates/pet-jsonrpc/src/server.rs, then reply serialization in crates/pet-jsonrpc/src/lib.rs; start with the injectable reader/writer seam from dependency #529. Add deterministic cases for fragmented and coalesced frames, IDs, malformed input, and size limits, using existing fuzz/property tooling where practical. Done means IDs round-trip, framing remains compatible, and invalid input cannot panic or lose requests.

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

Descrição

bug

Tracking plan: #528
Priority: P2. Evidence: reproduced on Windows at 4e523ba.

Problem

The transport/dispatcher assumes a single Content-Length header, treats non-u64 request IDs as notifications, and narrows u64 IDs to u32. A bounded harness sent a valid control info request before each case and observed:

Input Actual behavior
Numeric ID 4294967297 Response ID 1
String ID audit-1 No response within 600 ms; routed as notification
Optional Content-Type header before the blank separator No response within 600 ms; payload framing misparsed

Sources: request dispatch, framing, reply serialization.

The payload length is also used directly for allocation without a documented upper bound.

Scope

  • Parse framed headers through the blank line; support optional Content-Type and partial reads without losing subsequent frames.
  • Represent supported request IDs without truncation across dispatch, refresh joiners, replies, and errors. Distinguish absent IDs from invalid IDs and valid string/numeric IDs.
  • Validate protocol messages and frame size, returning appropriate explicit errors or a documented connection-close outcome where framing cannot be recovered.
  • Update the documented supported JSONRPC/framing contract rather than silently broadening or narrowing behavior.

Acceptance criteria

  • String and large integer request IDs round-trip unchanged, including coalesced refresh replies and errors.
  • Tests cover extra headers, consecutive frames, fragmented header/payload reads, non-ASCII payload byte lengths, and clean/truncated EOF.
  • Malformed JSON, invalid request shapes/IDs, invalid lengths, and oversized frames cannot panic, trigger unbounded allocation, or silently lose a request.
  • Existing VS Code-style clients and environment/manager notifications remain compatible.
  • Fuzz/property-style parser cases are added using existing tooling where practical; deterministic regression cases are mandatory.

Dependencies

Depends on #529 to reuse its injectable reader/writer seam. The complete landing order is in #528. This is separate from the already-fixed stdout logging contamination in #341.

Linguagem predominante
Rust
Estrelas
207
Forks
45
Merge médio
3d 6h
PRs com merge (30d)
12

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

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 microsoft/python-environment-tools

Todas as issues de microsoft/python-environment-tools

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

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