Skip to content

Commit 79bc01c

Browse files
committed
Use libfuzzer instead of honggfuzz
1 parent 39d488b commit 79bc01c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+424
-1204
lines changed

.github/docker/Dockerfile.s390x

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM ubuntu:24.04
2+
3+
# Install both native (x86_64) and cross (s390x) compilation toolchains
4+
RUN apt-get update && \
5+
apt-get install -y --no-install-recommends \
6+
gcc g++ \
7+
gcc-13-s390x-linux-gnu \
8+
g++-13-s390x-linux-gnu \
9+
libc6-dev-s390x-cross \
10+
qemu-user-static \
11+
binfmt-support \
12+
curl \
13+
ca-certificates && \
14+
rm -rf /var/lib/apt/lists/*
15+
16+
# Set up alternatives to use GCC 13 for s390x
17+
RUN update-alternatives --install /usr/bin/s390x-linux-gnu-gcc s390x-linux-gnu-gcc /usr/bin/s390x-linux-gnu-gcc-13 100 && \
18+
update-alternatives --install /usr/bin/s390x-linux-gnu-g++ s390x-linux-gnu-g++ /usr/bin/s390x-linux-gnu-g++-13 100
19+
20+
# Register QEMU for s390x binary execution
21+
RUN update-binfmts --enable qemu-s390x || true
22+
23+
# Verify GCC versions
24+
RUN gcc --version && \
25+
s390x-linux-gnu-gcc --version && \
26+
s390x-linux-gnu-g++ --version
27+
28+
# Install Rust
29+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
30+
ENV PATH="/root/.cargo/bin:${PATH}"
31+
RUN rustup target add s390x-unknown-linux-gnu
32+
33+
# Set up cross-compilation environment
34+
ENV CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_LINKER=s390x-linux-gnu-gcc \
35+
CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_RUNNER="qemu-s390x-static -L /usr/s390x-linux-gnu" \
36+
CC_s390x_unknown_linux_gnu=s390x-linux-gnu-gcc \
37+
CXX_s390x_unknown_linux_gnu=s390x-linux-gnu-g++

.github/workflows/cron-daily-fuzz.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ jobs:
5959
with:
6060
persist-credentials: false
6161
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
62-
6362
id: cache-fuzz
6463
with:
6564
path: |
@@ -97,4 +96,4 @@ jobs:
9796
- name: Display structure of downloaded files
9897
run: ls -R
9998
- run: find executed_* -type f -exec cat {} + | sort > executed
100-
- run: source ./fuzz/fuzz-util.sh && listTargetNames | sort | diff - executed
99+
- run: cargo fuzz list | sort | diff - executed

.github/workflows/rust.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,6 @@ jobs:
262262
persist-credentials: false
263263
- name: "Select toolchain"
264264
uses: dtolnay/rust-toolchain@5d458579430fc14a04a08a1e7d3694f545e91ce6 # stable
265-
- name: "Add architecture i386"
266-
run: sudo dpkg --add-architecture i386
267265
- name: "Install i686 gcc"
268266
run: sudo apt-get update -y && sudo apt-get install -y gcc-multilib
269267
- name: "Install target"
@@ -288,7 +286,7 @@ jobs:
288286
run: rustup target add s390x-unknown-linux-gnu
289287
- name: "Install cross"
290288
run: cargo install cross --locked
291-
- name: "Run cross test"
289+
- name: "Run s390x tests"
292290
run: cross test --target s390x-unknown-linux-gnu
293291

294292
Embedded:

.gitignore

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# .gitignore for rust-bitcoin repository workspace.
2+
fuzz/hfuzz_input/
23

34
# Lock files
45
Cargo.lock
@@ -16,9 +17,5 @@ hashes/target
1617
bitcoin/dep_test
1718
mutants.out*
1819

19-
# Fuzz artifacts
20-
hfuzz_target
21-
hfuzz_workspace
22-
2320
# Local tooling
2421
.maintainer-tools

Cargo-minimal.lock

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ dependencies = [
9797
"bitcoin",
9898
"bitcoin-consensus-encoding",
9999
"bitcoin-p2p-messages",
100-
"honggfuzz",
100+
"libfuzzer-sys",
101101
"serde",
102102
"serde_json",
103103
"standard_test",
@@ -252,43 +252,26 @@ version = "0.1.1"
252252
source = "registry+https://github.com/rust-lang/crates.io-index"
253253
checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd"
254254

255-
[[package]]
256-
name = "honggfuzz"
257-
version = "0.5.58"
258-
source = "registry+https://github.com/rust-lang/crates.io-index"
259-
checksum = "6e8319f3cc8fe416e7aa1ab95dcc04fd49f35397a47d0b2f0f225f6dba346a07"
260-
dependencies = [
261-
"lazy_static",
262-
"memmap2",
263-
"rustc_version",
264-
"semver",
265-
]
266-
267255
[[package]]
268256
name = "itoa"
269257
version = "0.4.3"
270258
source = "registry+https://github.com/rust-lang/crates.io-index"
271259
checksum = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
272260

273-
[[package]]
274-
name = "lazy_static"
275-
version = "1.5.0"
276-
source = "registry+https://github.com/rust-lang/crates.io-index"
277-
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
278-
279261
[[package]]
280262
name = "libc"
281263
version = "0.2.155"
282264
source = "registry+https://github.com/rust-lang/crates.io-index"
283265
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
284266

285267
[[package]]
286-
name = "memmap2"
287-
version = "0.9.0"
268+
name = "libfuzzer-sys"
269+
version = "0.4.0"
288270
source = "registry+https://github.com/rust-lang/crates.io-index"
289-
checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
271+
checksum = "86c975d637bc2a2f99440932b731491fc34c7f785d239e38af3addd3c2fd0e46"
290272
dependencies = [
291-
"libc",
273+
"arbitrary",
274+
"cc",
292275
]
293276

294277
[[package]]
@@ -346,15 +329,6 @@ dependencies = [
346329
"zerocopy",
347330
]
348331

349-
[[package]]
350-
name = "rustc_version"
351-
version = "0.4.0"
352-
source = "registry+https://github.com/rust-lang/crates.io-index"
353-
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
354-
dependencies = [
355-
"semver",
356-
]
357-
358332
[[package]]
359333
name = "ryu"
360334
version = "1.0.0"
@@ -381,12 +355,6 @@ dependencies = [
381355
"cc",
382356
]
383357

384-
[[package]]
385-
name = "semver"
386-
version = "1.0.0"
387-
source = "registry+https://github.com/rust-lang/crates.io-index"
388-
checksum = "76b5842e81eb9bbea19276a9dbbda22ac042532f390a67ab08b895617978abf3"
389-
390358
[[package]]
391359
name = "serde"
392360
version = "1.0.195"

Cargo-recent.lock

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ dependencies = [
9696
"bitcoin",
9797
"bitcoin-consensus-encoding",
9898
"bitcoin-p2p-messages",
99-
"honggfuzz",
99+
"libfuzzer-sys",
100100
"serde",
101101
"serde_json",
102102
"standard_test",
@@ -199,6 +199,8 @@ version = "1.1.22"
199199
source = "registry+https://github.com/rust-lang/crates.io-index"
200200
checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0"
201201
dependencies = [
202+
"jobserver",
203+
"libc",
202204
"shlex",
203205
]
204206

@@ -248,29 +250,20 @@ version = "0.1.1"
248250
source = "registry+https://github.com/rust-lang/crates.io-index"
249251
checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd"
250252

251-
[[package]]
252-
name = "honggfuzz"
253-
version = "0.5.58"
254-
source = "registry+https://github.com/rust-lang/crates.io-index"
255-
checksum = "6e8319f3cc8fe416e7aa1ab95dcc04fd49f35397a47d0b2f0f225f6dba346a07"
256-
dependencies = [
257-
"lazy_static",
258-
"memmap2",
259-
"rustc_version",
260-
"semver",
261-
]
262-
263253
[[package]]
264254
name = "itoa"
265255
version = "1.0.11"
266256
source = "registry+https://github.com/rust-lang/crates.io-index"
267257
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
268258

269259
[[package]]
270-
name = "lazy_static"
271-
version = "1.5.0"
260+
name = "jobserver"
261+
version = "0.1.32"
272262
source = "registry+https://github.com/rust-lang/crates.io-index"
273-
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
263+
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
264+
dependencies = [
265+
"libc",
266+
]
274267

275268
[[package]]
276269
name = "libc"
@@ -279,19 +272,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
279272
checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5"
280273

281274
[[package]]
282-
name = "memchr"
283-
version = "2.7.4"
275+
name = "libfuzzer-sys"
276+
version = "0.4.10"
284277
source = "registry+https://github.com/rust-lang/crates.io-index"
285-
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
278+
checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404"
279+
dependencies = [
280+
"arbitrary",
281+
"cc",
282+
]
286283

287284
[[package]]
288-
name = "memmap2"
289-
version = "0.9.5"
285+
name = "memchr"
286+
version = "2.7.4"
290287
source = "registry+https://github.com/rust-lang/crates.io-index"
291-
checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
292-
dependencies = [
293-
"libc",
294-
]
288+
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
295289

296290
[[package]]
297291
name = "ppv-lite86"
@@ -355,15 +349,6 @@ dependencies = [
355349
"getrandom",
356350
]
357351

358-
[[package]]
359-
name = "rustc_version"
360-
version = "0.4.1"
361-
source = "registry+https://github.com/rust-lang/crates.io-index"
362-
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
363-
dependencies = [
364-
"semver",
365-
]
366-
367352
[[package]]
368353
name = "ryu"
369354
version = "1.0.18"
@@ -390,12 +375,6 @@ dependencies = [
390375
"cc",
391376
]
392377

393-
[[package]]
394-
name = "semver"
395-
version = "1.0.23"
396-
source = "registry+https://github.com/rust-lang/crates.io-index"
397-
checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
398-
399378
[[package]]
400379
name = "serde"
401380
version = "1.0.210"

Cross.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[target.s390x-unknown-linux-gnu]
2+
dockerfile = ".github/docker/Dockerfile.s390x"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ of "our CI didn't fail with these versions". Specifically, we do not guarantee
102102
that the committed hashes are free from malware. It is your responsibility to
103103
review them.
104104

105+
- Fuzz testing with [`libfuzzer`](https://github.com/rust-fuzz/libfuzzer)
105106
## Policy on Altcoins/Altchains
106107

107108
Since the altcoin landscape includes projects which [frequently appear and disappear, and are poorly

0 commit comments

Comments
 (0)