Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte
#532 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
rust
Domaine
api, backend, testing

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
Rust
Étoiles
207
Forks
45
Merge moyen
3 j 6 h
PR mergées (30 j)
12

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/python-environment-tools

Toutes les issues de microsoft/python-environment-tools

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.