From 269bd24da9e9b713f3bca0782e460c00369548ae Mon Sep 17 00:00:00 2001 From: fakeshadow <24548779@qq.com> Date: Wed, 14 Apr 2021 20:29:50 +0800 Subject: [PATCH] Make double set_available false debug assert panic --- actix-server/src/accept.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/actix-server/src/accept.rs b/actix-server/src/accept.rs index 571777b5..147cbf23 100644 --- a/actix-server/src/accept.rs +++ b/actix-server/src/accept.rs @@ -119,7 +119,11 @@ impl Availability { if avail { self.0[offset] |= 1 << idx as u128; } else { - self.0[offset] ^= 1 << idx as u128; + let shift = 1 << idx as u128; + + debug_assert_ne!(self.0[offset] & shift, 0); + + self.0[offset] ^= shift; } } @@ -519,6 +523,8 @@ mod test { aval.set_available(idx, true); assert!(aval.available()); + aval.set_available(idx, true); + aval.set_available(idx, false); assert!(!aval.available()); } @@ -559,6 +565,13 @@ mod test { single(&mut aval, 512); } + #[test] + #[should_panic] + fn double_set_unavailable() { + let mut aval = Availability::default(); + aval.set_available(233, false); + } + #[test] fn pin_point() { let mut aval = Availability::default();