feat: add nix fuzz devShell and fuzz-usbip app with --fork support
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
dfc7e366d9
commit
565e0f5834
2 changed files with 80 additions and 4 deletions
23
flake.lock
generated
23
flake.lock
generated
|
|
@ -37,7 +37,28 @@
|
|||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774408260,
|
||||
"narHash": "sha256-Jn9d9r85dmf3gTMnSRt6t+DP2nQ5uJns/MMXg2FpzfM=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "d6471ee5a8f470251e6e5b83a20a182eb6c46c9b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
|
|
|||
61
flake.nix
61
flake.nix
|
|
@ -4,9 +4,13 @@
|
|||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
outputs = { self, nixpkgs, flake-utils, rust-overlay }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
|
@ -44,6 +48,8 @@
|
|||
mainProgram = "usbip-rs";
|
||||
};
|
||||
};
|
||||
|
||||
rust-nightly = rust-overlay.packages.${system}.rust-nightly;
|
||||
in
|
||||
{
|
||||
packages = {
|
||||
|
|
@ -55,8 +61,57 @@
|
|||
default = usbip-rs;
|
||||
};
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
devShells = {
|
||||
default = pkgs.mkShell {
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
};
|
||||
|
||||
fuzz = pkgs.mkShell {
|
||||
buildInputs = [
|
||||
rust-nightly
|
||||
pkgs.cargo-fuzz
|
||||
pkgs.libusb1
|
||||
] ++ pkgs.lib.optionals pkgs.stdenv.hostPlatform.isLinux [
|
||||
pkgs.udev
|
||||
];
|
||||
nativeBuildInputs = [ pkgs.stdenv.cc pkgs.pkg-config ];
|
||||
};
|
||||
};
|
||||
|
||||
apps = let
|
||||
fuzz-usbip = pkgs.writeShellScriptBin "fuzz-usbip" ''
|
||||
set -euo pipefail
|
||||
export PATH="${rust-nightly}/bin:${pkgs.cargo-fuzz}/bin:${pkgs.stdenv.cc}/bin:${pkgs.pkg-config}/bin:$PATH"
|
||||
export PKG_CONFIG_PATH="${pkgs.libusb1.dev}/lib/pkgconfig''${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"${pkgs.lib.optionalString pkgs.stdenv.hostPlatform.isLinux '':${pkgs.udev.dev}/lib/pkgconfig''}
|
||||
cd "$(${pkgs.git}/bin/git rev-parse --show-toplevel)/lib"
|
||||
if [ $# -eq 0 ]; then
|
||||
cargo fuzz list
|
||||
else
|
||||
target="$1"
|
||||
shift
|
||||
fork=0
|
||||
args=()
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--fork=*) fork=''${arg#--fork=} ;;
|
||||
*) args+=("$arg") ;;
|
||||
esac
|
||||
done
|
||||
if [ "$fork" -gt 0 ]; then
|
||||
while true; do
|
||||
cargo fuzz run "$target" -- -max_len=1048576 "-fork=$fork" "''${args[@]}" || true
|
||||
echo "--- fuzzer exited, restarting (artifacts saved) ---"
|
||||
done
|
||||
else
|
||||
cargo fuzz run "$target" -- -max_len=1048576 "''${args[@]}"
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
fuzz-usbip = {
|
||||
type = "app";
|
||||
program = "${fuzz-usbip}/bin/fuzz-usbip";
|
||||
};
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue