fix(probe): reject duplicate reflector addresses
Build / build (pull_request) Failing after 4s
DevSkim / DevSkim (pull_request) Failing after 1m20s
rust-clippy analyze / Run rust-clippy analyzing (pull_request) Failing after 1m37s

This commit is contained in:
Nils Andreas Svee committed 2026-09-24 23:27:58 +07:00
1 parent 33a0ab1503
commit 193ece6b75
1 file changed
+11 -1
+11 -1
View File
@@ -32,7 +32,7 @@ use crate::settings::MeasurementType;
use crate::settings::Settings; use crate::settings::Settings;
use ::log::{info, warn}; use ::log::{info, warn};
use flume::RecvTimeoutError; use flume::RecvTimeoutError;
use std::collections::HashMap; use std::collections::{HashMap, HashSet};
use std::net::IpAddr; use std::net::IpAddr;
use std::str::FromStr; use std::str::FromStr;
use std::sync::atomic::{AtomicBool, AtomicU32, Ordering}; use std::sync::atomic::{AtomicBool, AtomicU32, Ordering};
@@ -192,6 +192,9 @@ fn setup_reflectors(settings: &Settings) -> anyhow::Result<ReflectorSetup> {
let configured = settings.load_reflectors()?; let configured = settings.load_reflectors()?;
let configured_count = configured.len(); let configured_count = configured.len();
let requested_count = settings.advanced_settings.num_reflectors as usize; let requested_count = settings.advanced_settings.num_reflectors as usize;
if configured.iter().collect::<HashSet<_>>().len() != configured_count {
anyhow::bail!("reflector list contains duplicate addresses");
}
let default_reflectors = [ let default_reflectors = [
IpAddr::from_str("9.9.9.9")?, IpAddr::from_str("9.9.9.9")?,
@@ -529,6 +532,13 @@ mod tests {
"reflector_ip,ip_version,description\n192.0.2.1,4,test\n192.0.2.2,4,test\n192.0.2.3,4,test\n192.0.2.4,4,test\n", "reflector_ip,ip_version,description\n192.0.2.1,4,test\n192.0.2.2,4,test\n192.0.2.3,4,test\n192.0.2.4,4,test\n",
).unwrap(); ).unwrap();
assert!(setup_reflectors(&settings).is_err()); assert!(setup_reflectors(&settings).is_err());
std::fs::write(
&path,
"reflector_ip,ip_version,description\n192.0.2.1,4,test\n192.0.2.2,4,test\n192.0.2.3,4,test\n192.0.2.4,4,test\n192.0.2.4,4,test\n",
)
.unwrap();
let error = setup_reflectors(&settings).err().unwrap();
assert!(error.to_string().contains("duplicate addresses"));
std::fs::write( std::fs::write(
&path, &path,
"reflector_ip,ip_version,description\n2001:db8::1,6,test\n", "reflector_ip,ip_version,description\n2001:db8::1,6,test\n",