From 713652e5d89b893b16269c709490ed51e6b7670b Mon Sep 17 00:00:00 2001 From: Dominik Maier Date: Tue, 16 Jul 2024 18:10:18 +0200 Subject: [PATCH] Better errors for empty registry in AnyMap (#2405) * Better errors for empty registry * Make errors non-panic * clippy --- libafl_bolts/src/serdeany.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libafl_bolts/src/serdeany.rs b/libafl_bolts/src/serdeany.rs index b70ebc6336..5ac58f20c1 100644 --- a/libafl_bolts/src/serdeany.rs +++ b/libafl_bolts/src/serdeany.rs @@ -23,6 +23,9 @@ pub type TypeRepr = u128; #[cfg(feature = "stable_anymap")] pub type TypeRepr = Cow<'static, str>; +/// Error string when no types at all have been registered yet. +pub(crate) const ERR_EMPTY_TYPES_REGISTER: &str = "Empty types registry. Please enable the `serdeany_autoreg` feature in libafl_bolts or register all required types manually using RegistryBuilder::register()."; + #[cfg(not(feature = "stable_anymap"))] fn type_repr() -> TypeRepr where @@ -121,7 +124,7 @@ pub mod serdeany_registry { hash_map::{Values, ValuesMut}, HashMap, }; - use serde::{Deserialize, Serialize}; + use serde::{de, Deserialize, Serialize}; use crate::{ serdeany::{ @@ -156,9 +159,10 @@ pub mod serdeany_registry { REGISTRY .deserializers .as_ref() - .expect("Empty types registry") + .ok_or_else(|| + de::Error::custom(super::ERR_EMPTY_TYPES_REGISTER))? .get(&id) - .expect("Cannot deserialize an unregistered type") + .ok_or_else(|| de::Error::custom(format_args!("Cannot deserialize the unregistered type with id {id}. Enable the `serde_autoreg` feature in libafl_bolts or register all requried types manually.")))? .0 }; let seed = DeserializeCallbackSeed:: { cb }; @@ -365,7 +369,7 @@ pub mod serdeany_registry { REGISTRY .deserializers .as_ref() - .expect("Empty types registry") + .expect(super::ERR_EMPTY_TYPES_REGISTER) .get(type_repr) .is_some() }, @@ -628,7 +632,7 @@ pub mod serdeany_registry { REGISTRY .deserializers .as_ref() - .expect("Empty types registry") + .expect(super::ERR_EMPTY_TYPES_REGISTER) .get(type_repr) .is_some() },