Skip to content

Commit 4cea4f9

Browse files
committed
fix: Make all the fuzzers work again, and add a test for protodump.
fuzz_select_target wasn't selecting anything, so fuzzers using that function either did nothing or would only ever select one of the functions.
1 parent c4e209e commit 4cea4f9

23 files changed

Lines changed: 419 additions & 236 deletions

.clusterfuzzlite/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash -eu
22

3-
FUZZ_TARGETS="bootstrap_fuzzer toxsave_fuzzer"
3+
FUZZ_TARGETS="bootstrap_fuzz_test toxsave_fuzz_test"
44

55
# out of tree build
66
cd "$WORK"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
10597d4f10d996d850e7f1b5237bcd5c9242d6c6d5ada6c6297fe484052f31fd /usr/local/bin/tox-bootstrapd
1+
5061f92a95ba45cfa49d78175fa8fb6e4d66a58d86634ea3fd3ae6d80cb0558a /usr/local/bin/tox-bootstrapd

testing/coverage_live.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
cd ../
55

66
# Run code coverage only on minized corpus to save time
7-
afl-cov --cover-corpus -d ./_afl_out --overwrite --live --coverage-cmd "_cov_build/bootstrap_fuzzer @@" --code-dir ../
7+
afl-cov --cover-corpus -d ./_afl_out --overwrite --live --coverage-cmd "_cov_build/bootstrap_fuzz_test @@" --code-dir ../

testing/distill_corpus.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22

3-
HARNESS_BIN="../_afl_build/bootstrap_fuzzer"
4-
COV_BIN="../_cov_build/bootstrap_fuzzer"
3+
HARNESS_BIN="../_afl_build/bootstrap_fuzz_test"
4+
COV_BIN="../_cov_build/bootstrap_fuzz_test"
55
# move to repo root
66
cd ../
77

testing/fuzzing/BUILD.bazel

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
1+
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
22
load("@rules_fuzzing//fuzzing:cc_defs.bzl", "cc_fuzz_test")
3-
load("@rules_fuzzing//fuzzing/private:binary.bzl", "fuzzing_binary") # buildifier: disable=bzl-visibility
43

54
cc_library(
65
name = "fuzz_support",
@@ -27,9 +26,9 @@ cc_library(
2726
cc_fuzz_test(
2827
name = "bootstrap_fuzz_test",
2928
size = "small",
30-
srcs = ["bootstrap_harness.cc"],
29+
srcs = ["bootstrap_fuzz_test.cc"],
3130
copts = ["-UNDEBUG"],
32-
corpus = ["//tools/toktok-fuzzer/corpus:bootstrap_fuzzer"],
31+
corpus = ["//tools/toktok-fuzzer/corpus:bootstrap_fuzz_test"],
3332
deps = [
3433
":fuzz_support",
3534
":fuzz_tox",
@@ -58,9 +57,9 @@ cc_fuzz_test(
5857
cc_fuzz_test(
5958
name = "toxsave_fuzz_test",
6059
size = "small",
61-
srcs = ["toxsave_harness.cc"],
60+
srcs = ["toxsave_fuzz_test.cc"],
6261
copts = ["-UNDEBUG"],
63-
corpus = ["//tools/toktok-fuzzer/corpus:toxsave_fuzzer"],
62+
corpus = ["//tools/toktok-fuzzer/corpus:toxsave_fuzz_test"],
6463
deps = [
6564
":fuzz_support",
6665
"//c-toxcore/toxcore:tox",
@@ -80,12 +79,34 @@ cc_binary(
8079
],
8180
)
8281

83-
fuzzing_binary(
84-
name = "protodump_bin",
85-
testonly = True,
86-
binary = ":protodump",
87-
engine = "@rules_fuzzing//fuzzing:cc_engine",
82+
genrule(
83+
name = "e2e_fuzz_test_init",
84+
outs = [
85+
"e2e_fuzz_test_init.dat",
86+
"e2e_fuzz_test_bootstrap.dat",
87+
],
88+
cmd = "$(location :protodump) $(location e2e_fuzz_test_init.dat) $(location e2e_fuzz_test_bootstrap.dat)",
89+
tags = ["manual"],
90+
tools = [":protodump"],
91+
)
92+
93+
# bazel test --config=asan-libfuzzer //c-toxcore/testing/fuzzing:protodump_reduce_test
94+
cc_test(
95+
name = "protodump_reduce_test",
96+
size = "small",
97+
srcs = ["protodump_reduce.cc"],
98+
args = ["$(location :e2e_fuzz_test_init.dat)"],
99+
copts = ["-UNDEBUG"],
100+
data = [":e2e_fuzz_test_init.dat"],
88101
tags = ["manual"],
102+
deps = [
103+
":fuzz_support",
104+
":fuzz_tox",
105+
"//c-toxcore/toxcore:tox",
106+
"//c-toxcore/toxcore:tox_dispatch",
107+
"//c-toxcore/toxcore:tox_events",
108+
"@rules_fuzzing//fuzzing:cc_engine",
109+
],
89110
)
90111

91112
cc_fuzz_test(

testing/fuzzing/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,18 @@ else()
99
endif()
1010

1111
function(fuzz_test target source_dir)
12-
set(${target}_CORPUS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/toktok-fuzzer/corpus/${target}_fuzz_test)
13-
file(GLOB ${target}_fuzz_CORPUS "${${target}_CORPUS_DIR}/*")
12+
set(CORPUS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/toktok-fuzzer/corpus/${target}_fuzz_test)
13+
file(GLOB CORPUS "${CORPUS_DIR}/*")
1414
add_executable(${target}_fuzz_test ${source_dir}/${target}_fuzz_test.cc)
1515
target_link_libraries(${target}_fuzz_test PRIVATE toxcore_fuzz fuzz_support ${LIBFUZZER_LINKER_FLAGS})
16-
if(${target}_fuzz_CORPUS)
17-
add_test(NAME ${target}_fuzz COMMAND ${CROSSCOMPILING_EMULATOR} ${target}_fuzz_test -max_total_time=10 ${${target}_fuzz_CORPUS})
16+
if(CORPUS)
17+
add_test(NAME ${target}_fuzz COMMAND ${CROSSCOMPILING_EMULATOR} ${target}_fuzz_test -max_total_time=10 ${CORPUS})
18+
set_property(TEST ${target}_fuzz PROPERTY ENVIRONMENT "LLVM_PROFILE_FILE=${target}.profraw;srcdir=${CMAKE_CURRENT_SOURCE_DIR}")
1819
endif()
1920
endfunction()
2021

21-
# Fuzzes the toxsave API
22-
add_executable(toxsave_fuzzer toxsave_harness.cc)
23-
target_link_libraries(toxsave_fuzzer PRIVATE toxcore_fuzz fuzz_support ${LIBFUZZER_LINKER_FLAGS})
24-
25-
# Fuzzes the bootstrap process
26-
add_executable(bootstrap_fuzzer bootstrap_harness.cc)
27-
target_link_libraries(bootstrap_fuzzer PRIVATE toxcore_fuzz fuzz_support ${LIBFUZZER_LINKER_FLAGS})
22+
fuzz_test(bootstrap .) # Fuzzes the bootstrap process
23+
fuzz_test(toxsave .) # Fuzzes the bootstrap process
2824

2925
fuzz_test(DHT ../../toxcore)
3026
fuzz_test(forwarding ../../toxcore)
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,12 @@ void setup_callbacks(Tox_Dispatch *dispatch)
8383
dispatch, [](Tox *tox, const Tox_Event_Friend_Request *event, void *user_data) {
8484
Tox_Err_Friend_Add err;
8585
tox_friend_add_norequest(tox, tox_event_friend_request_get_public_key(event), &err);
86-
assert(err == TOX_ERR_FRIEND_ADD_OK || err == TOX_ERR_FRIEND_ADD_OWN_KEY
87-
|| err == TOX_ERR_FRIEND_ADD_ALREADY_SENT
88-
|| err == TOX_ERR_FRIEND_ADD_BAD_CHECKSUM);
86+
if (!(err == TOX_ERR_FRIEND_ADD_OK || err == TOX_ERR_FRIEND_ADD_OWN_KEY
87+
|| err == TOX_ERR_FRIEND_ADD_ALREADY_SENT
88+
|| err == TOX_ERR_FRIEND_ADD_BAD_CHECKSUM
89+
|| err == TOX_ERR_FRIEND_ADD_MALLOC)) {
90+
printf("unexpected error: %s\n", tox_err_friend_add_to_string(err));
91+
}
8992
});
9093
tox_events_callback_friend_status(
9194
dispatch, [](Tox *tox, const Tox_Event_Friend_Status *event, void *user_data) {
@@ -120,7 +123,7 @@ void TestBootstrap(Fuzz_Data &input)
120123
[](Tox *tox, Tox_Log_Level level, const char *file, uint32_t line, const char *func,
121124
const char *message, void *user_data) {
122125
// Log to stdout.
123-
if (DEBUG) {
126+
if (Fuzz_Data::DEBUG) {
124127
std::printf("[tox1] %c %s:%d(%s): %s\n", tox_log_level_name(level), file, line,
125128
func, message);
126129
}
@@ -167,7 +170,7 @@ void TestBootstrap(Fuzz_Data &input)
167170
assert(dispatch != nullptr);
168171
setup_callbacks(dispatch);
169172

170-
while (input.size > 0) {
173+
while (!input.empty()) {
171174
Tox_Err_Events_Iterate error_iterate;
172175
Tox_Events *events = tox_events_iterate(tox, true, &error_iterate);
173176
assert(tox_events_equal(null_sys.sys.get(), events, events));

testing/fuzzing/e2e_fuzz_test.cc

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,6 @@ void setup_callbacks(Tox_Dispatch *dispatch)
110110
dispatch, [](Tox *tox, const Tox_Event_Friend_Request *event, void *user_data) {
111111
Tox_Err_Friend_Add err;
112112
tox_friend_add_norequest(tox, tox_event_friend_request_get_public_key(event), &err);
113-
assert(err == TOX_ERR_FRIEND_ADD_OK || err == TOX_ERR_FRIEND_ADD_OWN_KEY
114-
|| err == TOX_ERR_FRIEND_ADD_ALREADY_SENT
115-
|| err == TOX_ERR_FRIEND_ADD_BAD_CHECKSUM);
116113
});
117114
tox_events_callback_friend_status(
118115
dispatch, [](Tox *tox, const Tox_Event_Friend_Status *event, void *user_data) {
@@ -147,7 +144,7 @@ void TestEndToEnd(Fuzz_Data &input)
147144
[](Tox *tox, Tox_Log_Level level, const char *file, uint32_t line, const char *func,
148145
const char *message, void *user_data) {
149146
// Log to stdout.
150-
if (DEBUG) {
147+
if (Fuzz_Data::DEBUG) {
151148
std::printf("[tox1] %c %s:%d(%s): %s\n", tox_log_level_name(level), file, line,
152149
func, message);
153150
}
@@ -170,7 +167,7 @@ void TestEndToEnd(Fuzz_Data &input)
170167
assert(dispatch != nullptr);
171168
setup_callbacks(dispatch);
172169

173-
while (input.size > 0) {
170+
while (!input.empty()) {
174171
Tox_Err_Events_Iterate error_iterate;
175172
Tox_Events *events = tox_events_iterate(tox, true, &error_iterate);
176173
assert(tox_events_equal(null_sys.sys.get(), events, events));

0 commit comments

Comments
 (0)