From 167b749e3dabfa4928fa621a0c438863a3ddb127 Mon Sep 17 00:00:00 2001 From: Cameron Garnham Date: Thu, 24 Nov 2022 21:31:47 +0100 Subject: [PATCH] db: check info_hash record not found instead dropping all errors --- src/databases/mysql.rs | 4 ++-- src/databases/sqlite.rs | 16 +++++++++------- src/tracker/mod.rs | 10 ++++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/databases/mysql.rs b/src/databases/mysql.rs index a4d870101..fc6ff5098 100644 --- a/src/databases/mysql.rs +++ b/src/databases/mysql.rs @@ -141,10 +141,10 @@ impl Database for MysqlDatabase { "SELECT info_hash FROM whitelist WHERE info_hash = :info_hash", params! { info_hash }, ) - .map_err(|_| database::Error::QueryReturnedNoRows)? + .map_err(|_| database::Error::DatabaseError)? { Some(info_hash) => Ok(InfoHash::from_str(&info_hash).unwrap()), - None => Err(database::Error::InvalidQuery), + None => Err(database::Error::QueryReturnedNoRows), } } diff --git a/src/databases/sqlite.rs b/src/databases/sqlite.rs index ef9f12d9c..7a567b07e 100644 --- a/src/databases/sqlite.rs +++ b/src/databases/sqlite.rs @@ -137,13 +137,15 @@ impl Database for SqliteDatabase { let mut stmt = conn.prepare("SELECT info_hash FROM whitelist WHERE info_hash = ?")?; let mut rows = stmt.query([info_hash])?; - if let Some(row) = rows.next()? { - let info_hash: String = row.get(0).unwrap(); - - // should never be able to fail - Ok(InfoHash::from_str(&info_hash).unwrap()) - } else { - Err(database::Error::InvalidQuery) + match rows.next() { + Ok(row) => match row { + Some(row) => Ok(InfoHash::from_str(&row.get_unwrap::<_, String>(0)).unwrap()), + None => Err(database::Error::QueryReturnedNoRows), + }, + Err(e) => { + debug!("{:?}", e); + Err(database::Error::InvalidQuery) + } } } diff --git a/src/tracker/mod.rs b/src/tracker/mod.rs index a02e1123b..8987f49f5 100644 --- a/src/tracker/mod.rs +++ b/src/tracker/mod.rs @@ -108,17 +108,19 @@ impl TorrentTracker { /// It adds a torrent to the whitelist if it has not been whitelisted previously async fn add_torrent_to_database_whitelist(&self, info_hash: &InfoHash) -> Result<(), database::Error> { - match self + if let Err(e) = self .database .get_info_hash_from_whitelist(&info_hash.to_owned().to_string()) .await { - Ok(_preexisting_info_hash) => Ok(()), - _ => { + if let database::Error::QueryReturnedNoRows = e { self.database.add_info_hash_to_whitelist(*info_hash).await?; - Ok(()) + } else { + eprintln!("{e}"); + return Err(e); } } + Ok(()) } pub async fn add_torrent_to_memory_whitelist(&self, info_hash: &InfoHash) -> bool {