Skip to content

Commit c86e116

Browse files
authored
Remove serde_json dependency from libafl_bolts (#2639)
* Remove serde_json dependency from libafl_bolts * more like a serialize err * Fix nautilus json
1 parent 4712083 commit c86e116

File tree

6 files changed

+23
-38
lines changed

6 files changed

+23
-38
lines changed

libafl/src/corpus/inmemory_ondisk.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -423,14 +423,20 @@ impl<I> InMemoryOnDiskCorpus<I> {
423423

424424
let mut tmpfile = File::create(&tmpfile_path)?;
425425

426+
let json_error =
427+
|err| Error::serialize(format!("Failed to json-ify metadata: {err:?}"));
428+
426429
let serialized = match self.meta_format.as_ref().unwrap() {
427430
OnDiskMetadataFormat::Postcard => postcard::to_allocvec(&ondisk_meta)?,
428-
OnDiskMetadataFormat::Json => serde_json::to_vec(&ondisk_meta)?,
429-
OnDiskMetadataFormat::JsonPretty => serde_json::to_vec_pretty(&ondisk_meta)?,
430-
#[cfg(feature = "gzip")]
431-
OnDiskMetadataFormat::JsonGzip => {
432-
GzipCompressor::new().compress(&serde_json::to_vec_pretty(&ondisk_meta)?)
431+
OnDiskMetadataFormat::Json => {
432+
serde_json::to_vec(&ondisk_meta).map_err(json_error)?
433433
}
434+
OnDiskMetadataFormat::JsonPretty => {
435+
serde_json::to_vec_pretty(&ondisk_meta).map_err(json_error)?
436+
}
437+
#[cfg(feature = "gzip")]
438+
OnDiskMetadataFormat::JsonGzip => GzipCompressor::new()
439+
.compress(&serde_json::to_vec_pretty(&ondisk_meta).map_err(json_error)?),
434440
};
435441
tmpfile.write_all(&serialized)?;
436442
fs::rename(&tmpfile_path, &metafile_path)?;

libafl/src/generators/nautilus.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ impl NautilusContext {
8686

8787
/// Create a new [`NautilusContext`] from a file
8888
pub fn from_file<P: AsRef<Path>>(tree_depth: usize, grammar_file: P) -> Result<Self, Error> {
89-
if grammar_file.as_ref().extension().unwrap_or_default() == "py" {
89+
let grammar_file = grammar_file.as_ref();
90+
if grammar_file.extension().unwrap_or_default() == "py" {
9091
log::debug!("Creating NautilusContext from python grammar");
9192
let ctx = python_grammar_loader::load_python_grammar(
9293
fs::read_to_string(grammar_file)?.as_str(),
@@ -96,7 +97,11 @@ impl NautilusContext {
9697
log::debug!("Creating NautilusContext from json grammar");
9798
let file = fs::File::open(grammar_file)?;
9899
let reader = BufReader::new(file);
99-
let rules: Vec<Vec<String>> = serde_json::from_reader(reader)?;
100+
let rules: Vec<Vec<String>> = serde_json::from_reader(reader).map_err(|err| {
101+
Error::illegal_argument(format!(
102+
"Error loading context from json grammar file {grammar_file:?}: {err:?}"
103+
))
104+
})?;
100105
Ok(Self::new(tree_depth, &rules))
101106
}
102107
}

libafl/src/observers/profiling.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,12 @@ impl ProfilingObserver {
8585
where
8686
P: AsRef<Path>,
8787
{
88-
let f = File::open(json_path)?;
88+
let f = File::open(json_path.as_ref())?;
8989
let reader = BufReader::new(f);
90-
let analysis_data: AnalysisData = serde_json::from_reader(reader)?;
90+
let analysis_data: AnalysisData = serde_json::from_reader(reader).map_err(|err| {
91+
let path = json_path.as_ref().to_string_lossy();
92+
Error::illegal_argument(format!("Failed to read from path {path}: {err:?}"))
93+
})?;
9194
// debug
9295
/*
9396
for record in &analysis_data.data {

libafl_bolts/Cargo.toml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ document-features = ["dep:document-features"]
4444

4545
## Enables features that need rust's `std` lib to work, like print, env, ... support
4646
std = [
47-
"serde_json",
48-
"serde_json/std",
4947
"hostname",
5048
"nix",
5149
"serde/std",
@@ -143,9 +141,6 @@ ahash = { workspace = true, optional = true } # The hash function already used i
143141
backtrace = { workspace = true, default-features = true, optional = true } # Used to get the stacktrace in StacktraceObserver
144142

145143
ctor = { optional = true, version = "0.2.8" }
146-
serde_json = { workspace = true, optional = true, default-features = false, features = [
147-
"alloc",
148-
] }
149144
miniz_oxide = { version = "0.8.0", optional = true }
150145
hostname = { version = "0.4.0", optional = true } # Is there really no gethostname in the stdlib?
151146
rand_core = { version = "0.6.4", optional = true }

libafl_bolts/src/lib.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -532,14 +532,6 @@ impl From<postcard::Error> for Error {
532532
}
533533
}
534534

535-
/// Stringify the json serializer error
536-
#[cfg(feature = "std")]
537-
impl From<serde_json::Error> for Error {
538-
fn from(err: serde_json::Error) -> Self {
539-
Self::serialize(format!("{err:?}"))
540-
}
541-
}
542-
543535
#[cfg(all(unix, feature = "std"))]
544536
impl From<nix::Error> for Error {
545537
fn from(err: nix::Error) -> Self {

libafl_bolts/src/serdeany.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -266,22 +266,6 @@ pub mod serdeany_registry {
266266
}
267267
}
268268

269-
/*
270-
#[cfg(feature = "anymap_debug")]
271-
impl fmt::Debug for SerdeAnyMap {
272-
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
273-
let json = serde_json::to_string(&self);
274-
write!(f, "SerdeAnyMap: [{:?}]", json)
275-
}
276-
}
277-
278-
#[cfg(not(feature = "anymap_debug"))]
279-
impl fmt::Debug for SerdeAnyMap {
280-
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
281-
write!(f, "SerdeAnymap with {} elements", self.len())
282-
}
283-
}*/
284-
285269
#[allow(unused_qualifications)]
286270
impl SerdeAnyMap {
287271
/// Get an element from the map.

0 commit comments

Comments
 (0)