diff --git a/Cargo.toml b/Cargo.toml index 4dde76f60..12db78a32 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,3 +27,6 @@ tempfile = "3" [features] reset_lazy_static = ["lazy_static"] + +[package.metadata.docs.rs] +rustdoc-args = ["--cfg", "docsrs"] diff --git a/src/common.rs b/src/common.rs index af354c900..dd29e0e98 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1,3 +1,4 @@ +use std::env; use std::path::{Path, PathBuf}; use xdg; @@ -9,6 +10,23 @@ fn xdg_dir() -> xdg::BaseDirectories { xdg::BaseDirectories::with_prefix(prefix).unwrap() } +fn data_dir(dir_name: &str) -> PathBuf { + // For docs.rs builds, use OUT_DIR. + // For other cases, use a XDG data directory. + // It is necessary to use OUT_DIR for docs.rs builds, + // as that is the only place where we can write to. + // The Cargo documentation recommends that build scripts + // place their generated files at OUT_DIR too, but we + // don't change that for now for normal builds. + if cfg!(docsrs) { + let path = Path::new(&env::var("OUT_DIR").unwrap()).join(dir_name); + std::fs::create_dir_all(&path).unwrap(); + path + } else { + xdg_dir().create_data_directory(dir_name).unwrap() + } +} + const SHORT_COMMIT_HASH_LEN: usize = 7; pub fn afl_rustc_version() -> String { @@ -32,31 +50,12 @@ fn pkg_version() -> String { ret } -// Place directories inside the crate when building for docs.rs. -// (Modifying system paths are forbidden.) - -#[cfg(docsrs)] -pub fn afl_dir() -> PathBuf { - let path = PathBuf::from("./afl"); - std::fs::create_dir_all(&path).unwrap(); - path -} - -#[cfg(not(docsrs))] pub fn afl_dir() -> PathBuf { - xdg_dir().create_data_directory("afl").unwrap() -} - -#[cfg(docsrs)] -pub fn afl_llvm_rt_dir() -> PathBuf { - let path = PathBuf::from("./afl-llvm-rt"); - std::fs::create_dir_all(&path).unwrap(); - path + data_dir("afl") } -#[cfg(not(docsrs))] pub fn afl_llvm_rt_dir() -> PathBuf { - xdg_dir().create_data_directory("afl-llvm-rt").unwrap() + data_dir("afl-llvm-rt") } #[allow(dead_code)] diff --git a/src/lib.rs b/src/lib.rs index f10ad34c5..e86823905 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,7 @@ use std::io::{self, Read}; use std::panic; mod common; +#[doc(hidden)] pub use common::*; // those functions are provided by the afl-llvm-rt static library @@ -20,6 +21,7 @@ extern "C" { static __afl_fuzz_ptr: *const u8; } +#[doc(hidden)] #[no_mangle] pub static __afl_sharedmem_fuzzing: i32 = 1; @@ -147,6 +149,7 @@ macro_rules! fuzz_nohook { ( $($x:tt)* ) => { $crate::__fuzz!(false, $($x)*) } } +#[doc(hidden)] #[macro_export] macro_rules! __fuzz { ($hook:expr, |$buf:ident| $body:block) => {