From 18214b235a0fa5a2304f1befffea5de02e8468e8 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Wed, 22 Mar 2023 10:38:38 +1100 Subject: [PATCH 1/3] Do not manually check for ascii range Clippy emits: error: manual check for common ascii range As suggested, use `is_ascii_*` methods instead of checking for ascii rang manually. --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b8a5ae8e6..ce34b2b11 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -415,9 +415,9 @@ fn check_hrp(hrp: &str) -> Result { return Err(Error::InvalidChar(b as char)); } - if (b'a'..=b'z').contains(&b) { + if b.is_ascii_lowercase() { has_lower = true; - } else if (b'A'..=b'Z').contains(&b) { + } else if b.is_ascii_uppercase() { has_upper = true; }; From bd4e8e2ba434efc91c72fd6c92101be53dae8c0c Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Wed, 22 Mar 2023 10:51:24 +1100 Subject: [PATCH 2/3] Rename travis-fuzz.sh to fuzz.sh We do not use travis any more, rename the fuzzing script accordingly. --- fuzz/{travis-fuzz.sh => fuzz.sh} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename fuzz/{travis-fuzz.sh => fuzz.sh} (100%) diff --git a/fuzz/travis-fuzz.sh b/fuzz/fuzz.sh similarity index 100% rename from fuzz/travis-fuzz.sh rename to fuzz/fuzz.sh From 37d285ce01cca099ad96e1c11d02ac04fd4ed61b Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Wed, 22 Mar 2023 10:55:15 +1100 Subject: [PATCH 3/3] Run fuzzer in CI As we do for `rust-bitcoin` run the fuzzer on each push and pull request. Requires: - Minor changes to fuzz target `encode_decode` to use current API - Installing hongfuzz without default dependencies (`arbitrary`) --- .github/workflows/fuzz.yml | 47 ++++++++++++++++++++++++++++++ fuzz/Cargo.toml | 2 +- fuzz/fuzz.sh | 2 +- fuzz/fuzz_targets/encode_decode.rs | 4 +-- 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/fuzz.yml diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml new file mode 100644 index 000000000..f0383c1b9 --- /dev/null +++ b/.github/workflows/fuzz.yml @@ -0,0 +1,47 @@ +name: Fuzz + +on: [push, pull_request] + +jobs: + + fuzz: + if: ${{ !github.event.act }} + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + fuzz_target: [decode_rnd, encode_decode] + steps: + - name: Install test dependencies + run: sudo apt-get update -y && sudo apt-get install -y binutils-dev libunwind8-dev libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc libiberty-dev + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + id: cache-fuzz + with: + path: | + ~/.cargo/bin + fuzz/target + target + key: cache-${{ matrix.target }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} + - name: Checkout Toolchain + uses: dtolnay/rust-toolchain@stable + - name: fuzz + run: cd fuzz && ./fuzz.sh "${{ matrix.fuzz_target }}" + - run: echo "${{ matrix.fuzz_target }}.rs" >executed_${{ matrix.fuzz_target }} + - uses: actions/upload-artifact@v2 + with: + name: executed_${{ matrix.fuzz_target }} + path: executed_${{ matrix.fuzz_target }} + + verify-execution: + if: ${{ !github.event.act }} + needs: fuzz + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/download-artifact@v2 + - name: Display structure of downloaded files + run: ls -R + - run: find executed_* -type f -exec cat {} + | sort > executed + - run: ls fuzz/fuzz_targets | sort > expected + - run: diff expected executed diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index c661ef6ec..785ee6b7d 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -12,7 +12,7 @@ afl_fuzz = ["afl"] honggfuzz_fuzz = ["honggfuzz"] [dependencies] -honggfuzz = { version = "0.5", optional = true } +honggfuzz = { version = "0.5", default-features = false, optional = true } afl = { version = "0.3", optional = true } libc = "0.2" bech32 = { path = ".." } diff --git a/fuzz/fuzz.sh b/fuzz/fuzz.sh index ae85ea913..db1b9eb38 100755 --- a/fuzz/fuzz.sh +++ b/fuzz/fuzz.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -cargo install --force honggfuzz +cargo install --force honggfuzz --no-default-features for TARGET in fuzz_targets/*; do FILENAME=$(basename $TARGET) FILE="${FILENAME%.*}" diff --git a/fuzz/fuzz_targets/encode_decode.rs b/fuzz/fuzz_targets/encode_decode.rs index bcc587dba..c5f1875e9 100644 --- a/fuzz/fuzz_targets/encode_decode.rs +++ b/fuzz/fuzz_targets/encode_decode.rs @@ -1,6 +1,6 @@ extern crate bech32; -use std::str::FromStr; +use std::convert::TryFrom; fn do_test(data: &[u8]) { if data.len() < 1 { @@ -19,7 +19,7 @@ fn do_test(data: &[u8]) { let dp = data[hrp_end..] .iter() - .map(|b| bech32::u5::try_from_u8(b % 32).unwrap()) + .map(|b| bech32::u5::try_from(b % 32).unwrap()) .collect::>(); let variant = if data[0] > 0x0f {