mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-05-31 15:00:45 +00:00
Add missing validation to avoid multicast enqueue on fPort=0.
This commit is contained in:
parent
0126286f75
commit
6f10bd907e
@ -101,6 +101,18 @@ pub struct MulticastGroupQueueItem {
|
|||||||
pub emit_at_time_since_gps_epoch: Option<i64>,
|
pub emit_at_time_since_gps_epoch: Option<i64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl MulticastGroupQueueItem {
|
||||||
|
fn validate(&self) -> Result<(), Error> {
|
||||||
|
if self.f_port == 0 || self.f_port > 255 {
|
||||||
|
return Err(Error::Validation(
|
||||||
|
"FPort must be between 1 - 255".to_string(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for MulticastGroupQueueItem {
|
impl Default for MulticastGroupQueueItem {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let now = Utc::now();
|
let now = Utc::now();
|
||||||
@ -437,6 +449,8 @@ pub async fn enqueue(
|
|||||||
qi: MulticastGroupQueueItem,
|
qi: MulticastGroupQueueItem,
|
||||||
gateway_ids: &[EUI64],
|
gateway_ids: &[EUI64],
|
||||||
) -> Result<(Vec<Uuid>, u32), Error> {
|
) -> Result<(Vec<Uuid>, u32), Error> {
|
||||||
|
qi.validate()?;
|
||||||
|
|
||||||
let (ids, f_cnt) = task::spawn_blocking({
|
let (ids, f_cnt) = task::spawn_blocking({
|
||||||
let gateway_ids = gateway_ids.to_vec();
|
let gateway_ids = gateway_ids.to_vec();
|
||||||
move || -> Result<(Vec<Uuid>, u32), Error> {
|
move || -> Result<(Vec<Uuid>, u32), Error> {
|
||||||
@ -1017,6 +1031,35 @@ pub mod test {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// invalid f_port
|
||||||
|
assert!(enqueue(
|
||||||
|
MulticastGroupQueueItem {
|
||||||
|
multicast_group_id: mg.id,
|
||||||
|
gateway_id: gw.gateway_id,
|
||||||
|
f_cnt: 1,
|
||||||
|
f_port: 0,
|
||||||
|
data: vec![3, 2, 1],
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
&[gw.gateway_id],
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.is_err());
|
||||||
|
|
||||||
|
assert!(enqueue(
|
||||||
|
MulticastGroupQueueItem {
|
||||||
|
multicast_group_id: mg.id,
|
||||||
|
gateway_id: gw.gateway_id,
|
||||||
|
f_cnt: 1,
|
||||||
|
f_port: 256,
|
||||||
|
data: vec![3, 2, 1],
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
&[gw.gateway_id],
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.is_err());
|
||||||
|
|
||||||
// Enqueue (Class-C) (delay)
|
// Enqueue (Class-C) (delay)
|
||||||
let (ids, f_cnt) = enqueue(
|
let (ids, f_cnt) = enqueue(
|
||||||
MulticastGroupQueueItem {
|
MulticastGroupQueueItem {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user