From ae9ab80ad9a8551790919b0c95a2086f7c174ae7 Mon Sep 17 00:00:00 2001 From: Valentin Huber Date: Tue, 12 Nov 2024 00:49:58 +0100 Subject: [PATCH] Fixing version pinning in CI (#2679) --- .github/workflows/build_and_test.yml | 2 + .../libfuzzer_libmozjpeg/hook_allocs.c | 4 +- utils/libafl_fmt/src/main.rs | 96 +++++++++++++------ 3 files changed, 71 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 7bd69e987a..140274a1da 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -190,6 +190,8 @@ jobs: cargo-fmt: runs-on: ubuntu-24.04 + env: + MAIN_LLVM_VERSION: 19 steps: - uses: actions/checkout@v4 - uses: ./.github/workflows/ubuntu-prepare diff --git a/fuzzers/inprocess/libfuzzer_libmozjpeg/hook_allocs.c b/fuzzers/inprocess/libfuzzer_libmozjpeg/hook_allocs.c index 1399261c65..e1d7e2203e 100644 --- a/fuzzers/inprocess/libfuzzer_libmozjpeg/hook_allocs.c +++ b/fuzzers/inprocess/libfuzzer_libmozjpeg/hook_allocs.c @@ -7,9 +7,9 @@ #ifdef _WIN32 #define posix_memalign(p, a, s) \ (((*(p)) = _aligned_malloc((s), (a))), *(p) ? 0 : errno) - #define RETADDR (uintptr_t) _ReturnAddress() + #define RETADDR (uintptr_t)_ReturnAddress() #else - #define RETADDR (uintptr_t) __builtin_return_address(0) + #define RETADDR (uintptr_t)__builtin_return_address(0) #endif #ifdef __GNUC__ diff --git a/utils/libafl_fmt/src/main.rs b/utils/libafl_fmt/src/main.rs index 8617fc9708..336a409c00 100644 --- a/utils/libafl_fmt/src/main.rs +++ b/utils/libafl_fmt/src/main.rs @@ -244,38 +244,63 @@ async fn main() -> io::Result<()> { .map(DirEntry::into_path) .collect(); + // cargo version + println!( + "Using {}", + get_version_string("cargo", &["+nightly"]).await? + ); + + // rustfmt version + println!( + "Using {}", + get_version_string("cargo", &["+nightly", "fmt"]).await? + ); + + let reference_clang_format = format!( + "clang-format-{}", + std::env::var("MAIN_LLVM_VERSION") + .inspect(|e| { + println!( + "Overriding clang-format version from the default {REF_LLVM_VERSION} to {e} using env variable MAIN_LLVM_VERSION" + ); + }) + .unwrap_or(REF_LLVM_VERSION.to_string()) + ); + let unspecified_clang_format = "clang-format"; + + let (clang, version, warning) = if which(&reference_clang_format).is_ok() { + ( + Some(reference_clang_format.as_str()), + Some(get_version_string(&reference_clang_format, &[]).await?), + None, + ) + } else if which(unspecified_clang_format).is_ok() { + let version = get_version_string(unspecified_clang_format, &[]).await?; + ( + Some(unspecified_clang_format), + Some(version.clone()), + Some(format!( + "using {version}, could provide a different result from {reference_clang_format}" + )), + ) + } else { + ( + None, + None, + Some("clang-format not found. Skipping C formatting...".to_string()), + ) + }; + + if let Some(version) = &version { + println!("Using {version}"); + } + let mut tokio_joinset = JoinSet::new(); for project in rust_projects_to_fmt { tokio_joinset.spawn(run_cargo_fmt(project, cli.check, cli.verbose)); } - let reference_clang_format = format!("clang-format-{REF_LLVM_VERSION}"); - let unspecified_clang_format = "clang-format"; - - let (clang, warning) = if which(&reference_clang_format).is_ok() { - (Some(reference_clang_format.as_str()), None) - } else if which(unspecified_clang_format).is_ok() { - let version = Command::new(unspecified_clang_format) - .arg("--version") - .output() - .await? - .stdout; - - ( - Some(unspecified_clang_format), - Some(format!( - "using {}, could provide a different result from clang-format-17", - from_utf8(&version).unwrap().replace('\n', "") - )), - ) - } else { - ( - None, - Some("clang-format not found. Skipping C formatting...".to_string()), - ) - }; - // println!("Using {:#?} to format...", clang); if let Some(clang) = clang { let c_files_to_fmt: Vec = WalkDir::new(&libafl_root_dir) .into_iter() @@ -306,9 +331,7 @@ async fn main() -> io::Result<()> { } } - if let Some(warning) = warning { - println!("\n{}: {}\n", "Warning".yellow().bold(), warning); - } + let _ = warning.map(print_warning); if cli.check { println!("[*] Check finished successfully."); @@ -318,3 +341,18 @@ async fn main() -> io::Result<()> { Ok(()) } + +async fn get_version_string(path: &str, args: &[&str]) -> Result { + let version = Command::new(path) + .args(args) + .arg("--version") + .output() + .await? + .stdout; + Ok(from_utf8(&version).unwrap().replace('\n', "")) +} + +#[allow(clippy::needless_pass_by_value)] +fn print_warning(warning: String) { + println!("\n{} {}\n", "Warning:".yellow().bold(), warning); +}