# libopus (Opus audio codec) — 5-MOAD Scan Result: CLEAN **Target:** xiph/opus **Source:** https://github.com/xiph/opus **Scan Date:** 2026-03-31 **Language:** C --- ## MOAD-0001 — CWE-407: Algorithmic Complexity (list membership in loop) ### Candidates investigated **`silk/sort.c` — `silk_insertion_sort_increasing_all_values_int16()` (lines 147–153)** Insertion sort O(L²) worst case. L = LPC order, which is spec-fixed: 10 (NB/MB) or 16 (WB). Max 256 comparisons per call. Called only in `silk_NLSF_stabilize` fallback path when iterative adjustment exceeds MAX_LOOPS=20, which is itself a rare corner case. Bounded absolutely. Not actionable. **`silk/NLSF_stabilize.c` — main loop (lines 60–118)** Outer loop over MAX_LOOPS=20 iterations. Inner loops over L (10 or 16) elements for min-diff search, plus two accumulation loops over kI (up to L). Total: O(20 × L) = O(320) ops worst case. Spec-bounded. CLEAN. **`silk/NLSF_VQ.c` — `silk_NLSF_VQ()` codebook search (lines 54–75)** O(K × LPC_order) where K=nVectors. Both codebooks (WB and NB/MB) have K=32 and LPC_order of 16 or 10. Max 512 ops per call. Spec-bounded. CLEAN. **`silk/NLSF_encode.c` — `silk_insertion_sort_increasing()` on K=32 errors (line 75)** Partial insertion sort to find nSurvivors best candidates from 32. K=32 is spec-fixed. CLEAN. **`src/opus_multistream.c` — `get_left_channel()` / `get_right_channel()` / `get_mono_channel()` (lines 57–91)** Per-frame call inside the outer `for(s=0; s