levels: index out of bounds

This commit is contained in:
Aravinth Manivannan 2021-06-07 14:23:43 +05:30
parent 68f95f99c2
commit d0b3416a54
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88
2 changed files with 9 additions and 5 deletions

View file

@ -183,14 +183,14 @@ impl Defense {
/// tighten up defense. Increases defense level by a factor of one.
/// When defense is at max level, calling this method will have no effect
pub fn tighten_up(&mut self) {
if self.current_visitor_threshold != self.levels.len() - 1 {
if self.current_visitor_threshold < self.levels.len() - 1 {
self.current_visitor_threshold += 1;
}
}
/// Loosen up defense. Decreases defense level by a factor of one.
/// When defense is at the lowest level, calling this method will have no effect.
pub fn loosen_up(&mut self) {
if self.current_visitor_threshold != 0 {
if self.current_visitor_threshold > 0 {
self.current_visitor_threshold -= 1;
}
}
@ -206,8 +206,12 @@ impl Defense {
}
/// Get current level's visitor threshold
pub fn visitor_threshold(&self) -> u32 {
self.levels[self.current_visitor_threshold].visitor_threshold
pub fn visitor_threshold(&self) -> Option<u32> {
if let Some(level) = self.levels.get(self.current_visitor_threshold) {
Some(level.visitor_threshold)
} else {
None
}
}
}

View file

@ -83,7 +83,7 @@ impl MCaptcha {
#[inline]
pub fn add_visitor(&mut self) {
self.visitor_threshold += 1;
if self.visitor_threshold > self.defense.visitor_threshold() {
if self.visitor_threshold > self.defense.visitor_threshold().unwrap() {
self.defense.tighten_up();
} else {
self.defense.loosen_up();