# must fail: receipts_ancestor_value_mismatch receipts_ancestor_no_matcher receipts_ancestor_no_publisher # a soft binding of another object reported as attesting the ancestor without ยง3.2's recovery (receipts::check_claim) diff --git a/wai/wai-rs/src/http_binding/receipts.rs b/wai/wai-rs/src/http_binding/receipts.rs index f2bdba57..d0e7543b 100644 --- a/wai/wai-rs/src/http_binding/receipts.rs +++ b/wai/wai-rs/src/http_binding/receipts.rs @@ -674,7 +674,7 @@ pub fn check_claim( let attests = match claim.subject_type { SubjectType::Object if claim.subject == *cid => Attests::Object, SubjectType::Receipt if groups.contains(&claim.subject) => Attests::Receipt, - SubjectType::Object if claim.class() == ClaimClass::SoftBinding && publisher(&claim.subject).is_some() => Attests::Ancestor, + SubjectType::Object if claim.class() == ClaimClass::SoftBinding => Attests::Ancestor, _ => return Err(ReceiptRefusal::NotAboutObject), }; claim.verify().map_err(ReceiptRefusal::Claim)?; @@ -696,9 +696,7 @@ pub fn check_claim( let no_matchers: [&dyn SoftBindingMatcher; 0] = []; let matchers = recovery.map_or(&no_matchers[..], |r| r.matchers); if attests == Attests::Ancestor { - let r = recovery.expect("a publisher key came from the recovery"); - let key = publisher(&claim.subject).expect("checked above"); - crate::claim_receipt::recover(&claim, &key, r.observed_value, Some(*cid), matchers).map_err(ReceiptRefusal::Recovery)?; + let _ = (recovery, publisher, cid); } else { step6(&claim, passed, fetch, matchers)?; }