diff options
author | Timo Kösters <timo@koesters.xyz> | 2023-08-01 11:25:06 +0000 |
---|---|---|
committer | Timo Kösters <timo@koesters.xyz> | 2023-08-01 11:25:06 +0000 |
commit | d2bfcb018ed40eb91b6f7dd31727e24f2b992727 (patch) | |
tree | 09d35cee24549cd5f857b0cfaa744fc3ed47d3d6 | |
parent | 08f0f17ff7709ddf02de5e069c1e6dbdaef7f2e5 (diff) | |
parent | 83805c66e509b39b5d17d1a8d5033d9593711e84 (diff) | |
download | conduit-d2bfcb018ed40eb91b6f7dd31727e24f2b992727.zip |
Merge branch 'error-leak-fix' into 'next'
sanitise potentially sensitive errors
See merge request famedly/conduit!523
-rw-r--r-- | src/api/server_server.rs | 2 | ||||
-rw-r--r-- | src/utils/error.rs | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 2220c4d..e04d63d 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -927,7 +927,7 @@ pub async fn send_transaction_message_route( Ok(send_transaction_message::v1::Response { pdus: resolved_map .into_iter() - .map(|(e, r)| (e, r.map_err(|e| e.to_string()))) + .map(|(e, r)| (e, r.map_err(|e| e.sanitized_error()))) .collect(), }) } diff --git a/src/utils/error.rs b/src/utils/error.rs index 5ffb38c..6e88cf5 100644 --- a/src/utils/error.rs +++ b/src/utils/error.rs @@ -138,6 +138,28 @@ impl Error { status_code, })) } + + /// Sanitizes public-facing errors that can leak sensitive information. + pub fn sanitized_error(&self) -> String { + let db_error = String::from("Database or I/O error occurred."); + + match self { + #[cfg(feature = "sled")] + Self::SledError { .. } => db_error, + #[cfg(feature = "sqlite")] + Self::SqliteError { .. } => db_error, + #[cfg(feature = "persy")] + Self::PersyError { .. } => db_error, + #[cfg(feature = "heed")] + Self::HeedError => db_error, + #[cfg(feature = "rocksdb")] + Self::RocksDbError { .. } => db_error, + Self::IoError { .. } => db_error, + Self::BadConfig { .. } => db_error, + Self::BadDatabase { .. } => db_error, + _ => self.to_string(), + } + } } #[cfg(feature = "persy")] |