From 321e197d8c211cc444d0730bf6aaefd581714147 Mon Sep 17 00:00:00 2001 From: strawberry Date: Sun, 5 May 2024 20:40:58 -0400 Subject: [PATCH] correct arithmetic adjustments Signed-off-by: strawberry --- src/api/client_server/keys.rs | 8 +------- src/api/client_server/membership.rs | 8 +------- src/api/client_server/room.rs | 4 +++- src/api/client_server/sync.rs | 12 ++++-------- src/database/key_value/rooms/state_accessor.rs | 4 ++-- src/database/key_value/rooms/timeline.rs | 6 +----- src/database/migrations.rs | 10 ++++------ src/database/mod.rs | 15 ++------------- src/service/admin/media/media_commands.rs | 2 +- src/service/admin/room/room_commands.rs | 2 +- src/service/admin/room/room_directory_commands.rs | 2 +- src/service/media/mod.rs | 4 +++- 12 files changed, 24 insertions(+), 53 deletions(-) diff --git a/src/api/client_server/keys.rs b/src/api/client_server/keys.rs index efd78b2f..040916b0 100644 --- a/src/api/client_server/keys.rs +++ b/src/api/client_server/keys.rs @@ -340,13 +340,7 @@ pub(crate) async fn get_keys_helper bool>( e.insert((Instant::now(), 1)); }, hash_map::Entry::Occupied(mut e) => { - *e.get_mut() = ( - Instant::now(), - e.get() - .1 - .checked_add(1) - .expect("bad_query_ratelimiter attempt/try count should not ever get this high"), - ); + *e.get_mut() = (Instant::now(), e.get().1.saturating_add(1)); }, } }; diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index cd9edd4c..54af1d41 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -1395,13 +1395,7 @@ async fn validate_and_add_event_id( e.insert((Instant::now(), 1)); }, Entry::Occupied(mut e) => { - *e.get_mut() = ( - Instant::now(), - e.get() - .1 - .checked_add(1) - .expect("bad_event_ratelimiter attempt/try count should not ever get this high"), - ); + *e.get_mut() = (Instant::now(), e.get().1.saturating_add(1)); }, } }; diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs index d027c4f4..46ad4454 100644 --- a/src/api/client_server/room.rs +++ b/src/api/client_server/room.rs @@ -806,7 +806,9 @@ pub(crate) async fn upgrade_room_route(body: Ruma) -> power_levels_event_content .users_default .checked_add(int!(1)) - .expect("user power level should not be this high"), + .ok_or_else(|| { + Error::BadRequest(ErrorKind::BadJson, "users_default power levels event content is not valid") + })?, ); power_levels_event_content.events_default = new_level; power_levels_event_content.invite = new_level; diff --git a/src/api/client_server/sync.rs b/src/api/client_server/sync.rs index c5afacc0..647ce905 100644 --- a/src/api/client_server/sync.rs +++ b/src/api/client_server/sync.rs @@ -557,7 +557,7 @@ async fn handle_left_room( left_state_events.push(pdu.to_sync_state_event()); - i = i.saturating_add(1); + i = i.wrapping_add(1); if i % 100 == 0 { tokio::task::yield_now().await; } @@ -705,11 +705,7 @@ async fn load_joined_room( // Recalculate heroes (first 5 members) let mut heroes = Vec::new(); - if joined_member_count - .checked_add(invited_member_count) - .expect("joined/invite member count should not be this high") - <= 5 - { + if joined_member_count.saturating_add(invited_member_count) <= 5 { // Go through all PDUs and for each member event, check if the user is still // joined or invited until we have 5 or we reach the end @@ -802,7 +798,7 @@ async fn load_joined_room( }; state_events.push(pdu); - i = i.saturating_add(1); + i = i.wrapping_add(1); if i % 100 == 0 { tokio::task::yield_now().await; } @@ -823,7 +819,7 @@ async fn load_joined_room( } state_events.push(pdu); - i = i.saturating_add(1); + i = i.wrapping_add(1); if i % 100 == 0 { tokio::task::yield_now().await; } diff --git a/src/database/key_value/rooms/state_accessor.rs b/src/database/key_value/rooms/state_accessor.rs index c039299d..5b3a71d0 100644 --- a/src/database/key_value/rooms/state_accessor.rs +++ b/src/database/key_value/rooms/state_accessor.rs @@ -25,7 +25,7 @@ impl service::rooms::state_accessor::Data for KeyValueDatabase { .parse_compressed_state_event(compressed)?; result.insert(parsed.0, parsed.1); - i = i.saturating_add(1); + i = i.wrapping_add(1); if i % 100 == 0 { tokio::task::yield_now().await; } @@ -63,7 +63,7 @@ impl service::rooms::state_accessor::Data for KeyValueDatabase { ); } - i = i.saturating_add(1); + i = i.wrapping_add(1); if i % 100 == 0 { tokio::task::yield_now().await; } diff --git a/src/database/key_value/rooms/timeline.rs b/src/database/key_value/rooms/timeline.rs index 104678f9..d583c7ec 100644 --- a/src/database/key_value/rooms/timeline.rs +++ b/src/database/key_value/rooms/timeline.rs @@ -284,11 +284,7 @@ fn count_to_id(room_id: &RoomId, count: PduCount, offset: u64, subtract: bool) - pdu_id.extend_from_slice(&0_u64.to_be_bytes()); let num = u64::MAX.saturating_sub(x); if subtract { - if num > 0 { - num.saturating_sub(offset) - } else { - num - } + num.saturating_sub(offset) } else { num.saturating_add(offset) } diff --git a/src/database/migrations.rs b/src/database/migrations.rs index 915841f1..a6726528 100644 --- a/src/database/migrations.rs +++ b/src/database/migrations.rs @@ -173,13 +173,11 @@ pub(crate) async fn migrations(db: &KeyValueDatabase, config: &Config) -> Result let mut current_sstatehash: Option = None; let mut current_room = None; let mut current_state = HashSet::new(); - let mut counter: u32 = 0; - let mut handle_state = |current_sstatehash: u64, - current_room: &RoomId, - current_state: HashSet<_>, - last_roomstates: &mut HashMap<_, _>| { - counter = counter.saturating_add(1); + let handle_state = |current_sstatehash: u64, + current_room: &RoomId, + current_state: HashSet<_>, + last_roomstates: &mut HashMap<_, _>| { let last_roomsstatehash = last_roomstates.get(current_room); let states_parents = last_roomsstatehash.map_or_else( diff --git a/src/database/mod.rs b/src/database/mod.rs index 825a21e8..4fbc3f97 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -402,19 +402,8 @@ impl KeyValueDatabase { let sqlite_exists = path.join("conduit.db").exists(); let rocksdb_exists = path.join("IDENTITY").exists(); - let mut count: u8 = 0; - - if sqlite_exists { - count = count.saturating_add(1); - } - - if rocksdb_exists { - count = count.saturating_add(1); - } - - if count > 1 { - error!("Multiple databases at database_path detected"); - return Ok(()); + if sqlite_exists && rocksdb_exists { + return Err(Error::bad_config("Multiple databases at database_path detected.")); } if sqlite_exists && config.database_backend != "sqlite" { diff --git a/src/service/admin/media/media_commands.rs b/src/service/admin/media/media_commands.rs index cb74a4bb..3f1fc8bf 100644 --- a/src/service/admin/media/media_commands.rs +++ b/src/service/admin/media/media_commands.rs @@ -144,7 +144,7 @@ pub(crate) async fn delete_list(body: Vec<&str>) -> Result>(); - let mut mxc_deletion_count: u32 = 0; + let mut mxc_deletion_count: usize = 0; for mxc in mxc_list { debug!("Deleting MXC {mxc} in bulk"); diff --git a/src/service/admin/room/room_commands.rs b/src/service/admin/room/room_commands.rs index 399f3c09..4e4e60e1 100644 --- a/src/service/admin/room/room_commands.rs +++ b/src/service/admin/room/room_commands.rs @@ -22,7 +22,7 @@ pub(crate) async fn list(_body: Vec<&str>, page: Option) -> Result>(); diff --git a/src/service/admin/room/room_directory_commands.rs b/src/service/admin/room/room_directory_commands.rs index dd4f599d..ccce2164 100644 --- a/src/service/admin/room/room_directory_commands.rs +++ b/src/service/admin/room/room_directory_commands.rs @@ -39,7 +39,7 @@ pub(crate) async fn process(command: RoomDirectoryCommand, _body: Vec<&str>) -> let rooms = rooms .into_iter() - .skip(page.checked_sub(1).unwrap().checked_mul(PAGE_SIZE).unwrap()) + .skip(page.saturating_sub(1).saturating_mul(PAGE_SIZE)) .take(PAGE_SIZE) .collect::>(); diff --git a/src/service/media/mod.rs b/src/service/media/mod.rs index ca81fa67..73c8e089 100644 --- a/src/service/media/mod.rs +++ b/src/service/media/mod.rs @@ -188,7 +188,9 @@ impl Service { Ok(duration) => { debug!("Parsed duration: {:?}", duration); debug!("System time now: {:?}", SystemTime::now()); - SystemTime::now().checked_sub(duration).unwrap() + SystemTime::now().checked_sub(duration).ok_or_else(|| { + Error::bad_database("Duration specified is not valid against the current system time") + })? }, Err(e) => { error!("Failed to parse user-specified time duration: {}", e);