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{
let from_script=script_from_hash.get(policy.FromScriptHash.as_str());
if let Some(&from_script)=from_script{
if policy.Policy==Policy::Replace&&policy.ToScriptID==from_script.ID{
// invalid policy. Reset the policy to None
println!("Invalid policy {:?}, queueing update...",policy.ID);
update_policies.push(submissions_api::types::UpdateScriptPolicyRequest{
ID:policy.ID,
FromScriptID:None,
ToScriptID:None,
Policy:Some(Policy::None),
// if not unique
if let Some(old_policy)=policy_from_hash.insert(policy.FromScriptHash.as_str(),policy){
println!("Policy is not unique! hash={} {:?} {:?}",policy.FromScriptHash,policy.ID,old_policy.ID);
policies_not_unique.push(submissions_api::types::GetScriptPolicyRequest{
ScriptPolicyID:policy.ID,
});
}else{
// if not unique
if let Some(old_policy)=policy_from_hash.insert(policy.FromScriptHash.as_str(),policy){
println!("Policy is not unique! hash={} {:?} {:?}",policy.FromScriptHash,policy.ID,old_policy.ID);
policies_not_unique.push(submissions_api::types::GetScriptPolicyRequest{
ScriptPolicyID:policy.ID,
}else if policy.Policy==Policy::Replace{
// validate replace policies
if policy.ToScriptID==from_script.ID{
// invalid policy. Reset the policy to None
println!("Invalid policy {:?}, queueing update...",policy.ID);
update_policies.push(submissions_api::types::UpdateScriptPolicyRequest{
ID:policy.ID,
FromScriptID:None,
ToScriptID:None,
Policy:Some(Policy::None),
});
}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){
check_policy_exists.push((policy,to_script));
}else{