Unwind vendored songbird once the upstream DAVE-trailer fix lands #57

Open
opened 2026-07-05 15:41:11 +00:00 by robocub · 0 comments
Collaborator

Follow-up to #36. The DAVE-trailer decode corruption is fixed by a vendored patched songbird (vendor/songbird, wired via [patch.crates-io]) plus davey 0.1.4 — shipped in v0.3.0-alpha.5 and live-confirmed. The vendor is a workaround, not a home; this issue tracks getting the fix upstream and unwinding it.

The patch is 3 small hunks in vendor/songbird/src/driver/tasks/udp_rx/: carry the receive-time corrected payload tail (rtp_body_tail, which accounts for the DAVE supplemental section and RTP padding) through the playout buffer (StoredPacket.payload_tail_len) so SsrcState::get_voice_tick slices the true Opus plaintext instead of re-deriving the end from the transport crypto mode alone. Upstream current has the same bug at time of writing.

Steps:

  1. Submit the upstream songbird issue (write-up ready: root cause, RFC 6716 raw-bits analysis, live confirmation, plus two secondary observations — silent DAVE decrypt-failure packet drops and the constant RTCP decrypt warnings).
  2. Offer the patch as an upstream PR if the approach is welcomed.
  3. Once a songbird release (or pinnable tag) contains the fix: drop vendor/songbird and the [patch.crates-io] override, pin the fixed release (constraint: songbird stays pinned, never floating), and remove the COPY vendor vendor builder-stage line from the Dockerfile (added in df4bd03 because cargo-chef's cook stage can't see path deps).
  4. Live-verify a DAVE call on the unwound build (a known CELT-heavy speaker stays clean).
**Follow-up to #36.** The DAVE-trailer decode corruption is fixed by a **vendored patched songbird** (`vendor/songbird`, wired via `[patch.crates-io]`) plus davey 0.1.4 — shipped in v0.3.0-alpha.5 and live-confirmed. The vendor is a workaround, not a home; this issue tracks getting the fix upstream and unwinding it. **The patch** is 3 small hunks in `vendor/songbird/src/driver/tasks/udp_rx/`: carry the receive-time corrected payload tail (`rtp_body_tail`, which accounts for the DAVE supplemental section *and* RTP padding) through the playout buffer (`StoredPacket.payload_tail_len`) so `SsrcState::get_voice_tick` slices the true Opus plaintext instead of re-deriving the end from the transport crypto mode alone. Upstream `current` has the same bug at time of writing. **Steps:** 1. [ ] Submit the upstream songbird issue (write-up ready: root cause, RFC 6716 raw-bits analysis, live confirmation, plus two secondary observations — silent DAVE decrypt-failure packet drops and the constant RTCP decrypt warnings). 2. [ ] Offer the patch as an upstream PR if the approach is welcomed. 3. [ ] Once a songbird release (or pinnable tag) contains the fix: drop `vendor/songbird` and the `[patch.crates-io]` override, pin the fixed release (constraint: songbird stays **pinned**, never floating), and remove the `COPY vendor vendor` builder-stage line from the Dockerfile (added in `df4bd03` because cargo-chef's cook stage can't see path deps). 4. [ ] Live-verify a DAVE call on the unwound build (a known CELT-heavy speaker stays clean).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dark/nether-voicebridge#57
No description provided.