Serialize patch vulnerabilities through one helper; get's selectionRequired options[] are unsorted and drop description

Offen
#1,836 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
58/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
cli

Rechercherichtung

Start with crates/socket-patch-cli/src/commands/agent_download.rs, list.rs, get.rs, and json_envelope.rs; compare the three vulnerability serializers and inspect select_json_mode_multi_free_options_serialize_vulnerabilities in get.rs. Run that test, then update it to assert that options contain vulnerabilities sorted by id with descriptions; confirm the other JSON outputs stay unchanged except for any deliberate severity field addition.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:triaged arch-audit priority:p3 refactor

[agent] Filed by the scheduled architecture audit (audit-cli-tests). Register: register comment.

Kind: refactor (with a small output fix). Register ID: T02.

Problem

The per-vulnerability JSON object {id, cves, severity, summary, description} is built by hand in three places, and the copies have drifted:

  • agent_download::patch_event_metadata L119-L141 includes description and sorts by id. Its comment notes that "HashMap iteration is otherwise nondeterministic and consumers diff this output".
  • list.rs L172-L192 builds the same shape from a PatchRecord, sorted and with description, but it omits the top-level severity that patch_event_metadata emits.
  • get.rs L767-L790, the selectionRequired options[], iterates p.vulnerabilities (a HashMap) unsorted and omits description.

So get --json <CVE> with several free options lists each option's vulnerabilities in a different order from run to run. The test that claims to cover this, select_json_mode_multi_free_options_serialize_vulnerabilities (get.rs L4898), only asserts Err(1), so the drift went unnoticed.

Proposed change

  • Add one #[derive(Serialize)] vulnerability view, or a single vuln_json(id, &v) helper, in json_envelope.rs. It returns the list sorted by id.
  • Use it from all three sites.
  • Decide in the PR whether list gains the top-level severity, and say so in the PR description.

Size

3 to 4 files. About −40 / +30 lines.

Acceptance criteria

  • scan/get event details and list --json are byte-identical before and after, apart from any field the PR deliberately adds.
  • get's options[].vulnerabilities is sorted by id and carries description.
  • The fake test above captures the envelope and asserts the sorted options[].vulnerabilities.
Vorherrschende Sprache
Rust
Sterne
9
Forks
2
Ø Merge
20 Std. 47 Min.
Gemergte PRs (30 T.)
681

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus SocketDev/socket-patch

Alle Issues in SocketDev/socket-patch

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.