Patches (falsify/run.sh), each failing the corpus cases it names: bytes-unchecked, decision-unchecked, recovery-record-unchecked, operating-point-unchecked, session-accepted, declaration-unnamed, first-publisher, matchers-need-object and set-sha-faults; claim-through-any-receipt, fetch-unmemoised, fetch-budget-unchecked and file-cap-unchecked regenerated against the new receipts.rs. Co-Authored-By: Claude Opus 5.5 <[email protected]>
14 lines
798 B
Diff
14 lines
798 B
Diff
# must fail: receipts_binding_recovery_object_not_held
|
|
# a recovery record's matchers dropped when the object is not held (receipts::check_index)
|
|
diff --git a/wai/wai-rs/src/http_binding/receipts.rs b/wai/wai-rs/src/http_binding/receipts.rs
|
|
index 83cd7ccb..fab80364 100644
|
|
--- a/wai/wai-rs/src/http_binding/receipts.rs
|
|
+++ b/wai/wai-rs/src/http_binding/receipts.rs
|
|
@@ -825,6 +825,7 @@ pub fn check_index(
|
|
// A recovery through a soft binding runs only for an object the client holds (the
|
|
// value it compares is computed from it): check_claim gates it on `held`. The
|
|
// matchers serve step 6 of a recovery record whether or not the object is held.
|
|
+ let recovery = recovery.filter(|_| matches!(held, ObjectHeld::Object(_)));
|
|
let claims = ix
|
|
.claims
|
|
.iter()
|