Eighteen patches, each breaking one function of the playlist side and naming the cases that must fail: adjacency (another program date-time, a larger discontinuity sequence), rendering (parts after EXTINF, layer lines after the URI), bandwidth rounding, duration rounding, a delta update read, the session-data line before #EXTM3U, the render digest left out of the signed payload, a receipt under another name, an unchecked parent, the open segment's parts not read for cids, the integer log without interpolation, a waiting utility rule, a look-ahead blind to stalls, an unlabelled figure taken as zero, per-layer bytes as a depth's, and size-blind entry order. falsify/run.sh builds with http and video_manifest and runs the eleven new Python mutations. A depth case at 150 kb/s sits between layer boundaries. Co-Authored-By: Claude Opus 5.5 <[email protected]>
15 lines
799 B
Diff
15 lines
799 B
Diff
# must fail: abr_order_O7_throughput_0
|
|
# a capability's entries left in table order, not ordered by size (abr::order_manifest)
|
|
diff --git a/wai/wai-rs/src/http_binding/abr.rs b/wai/wai-rs/src/http_binding/abr.rs
|
|
index a8046b34..8c2cc113 100644
|
|
--- a/wai/wai-rs/src/http_binding/abr.rs
|
|
+++ b/wai/wai-rs/src/http_binding/abr.rs
|
|
@@ -389,7 +389,7 @@ pub fn order_manifest(head: &Head, m: &ManifestV2, eligible: &dyn Fn(&str) -> bo
|
|
}
|
|
let mut order = Vec::with_capacity(e.len());
|
|
for (_, mut g) in groups {
|
|
- g.sort_by_key(|&i| (len(i), i));
|
|
+ g.sort_by_key(|&i| i);
|
|
let mut st = s.clone();
|
|
st.option_bytes = g.iter().map(|&i| len(i)).collect();
|
|
st.option_joules_micro = g.iter().map(|&i| s.option_joules_micro.get(i).copied().flatten()).collect();
|