reorder policy validation logic, guarantee only Replace policy ToScript is checked

This commit is contained in:
2025-08-02 18:39:20 -07:00
parent b8745479e1
commit 06d612e12b

View File

@@ -615,26 +615,26 @@ async fn repair(config:RepairConfig)->Result<(),RepairError>{
for policy in &policies{ for policy in &policies{
let from_script=script_from_hash.get(policy.FromScriptHash.as_str()); let from_script=script_from_hash.get(policy.FromScriptHash.as_str());
if let Some(&from_script)=from_script{ if let Some(&from_script)=from_script{
if policy.Policy==Policy::Replace&&policy.ToScriptID==from_script.ID{ // if not unique
// invalid policy. Reset the policy to None if let Some(old_policy)=policy_from_hash.insert(policy.FromScriptHash.as_str(),policy){
println!("Invalid policy {:?}, queueing update...",policy.ID); println!("Policy is not unique! hash={} {:?} {:?}",policy.FromScriptHash,policy.ID,old_policy.ID);
update_policies.push(submissions_api::types::UpdateScriptPolicyRequest{ policies_not_unique.push(submissions_api::types::GetScriptPolicyRequest{
ID:policy.ID, ScriptPolicyID:policy.ID,
FromScriptID:None,
ToScriptID:None,
Policy:Some(Policy::None),
}); });
}else{ }else if policy.Policy==Policy::Replace{
// if not unique // validate replace policies
if let Some(old_policy)=policy_from_hash.insert(policy.FromScriptHash.as_str(),policy){ if policy.ToScriptID==from_script.ID{
println!("Policy is not unique! hash={} {:?} {:?}",policy.FromScriptHash,policy.ID,old_policy.ID); // invalid policy. Reset the policy to None
policies_not_unique.push(submissions_api::types::GetScriptPolicyRequest{ println!("Invalid policy {:?}, queueing update...",policy.ID);
ScriptPolicyID:policy.ID, update_policies.push(submissions_api::types::UpdateScriptPolicyRequest{
ID:policy.ID,
FromScriptID:None,
ToScriptID:None,
Policy:Some(Policy::None),
}); });
}else{ }else{
// if policy is replace, but destination script is not allowed // destination script must exist and be allowed
if let Some(&to_script)=script_from_id.get(&policy.ToScriptID){ if let Some(&to_script)=script_from_id.get(&policy.ToScriptID){
check_policy_exists.push((policy,to_script)); check_policy_exists.push((policy,to_script));
}else{ }else{