Skip to content

Commit

Permalink
test: Add fuzzer tests to the bazel build.
Browse files Browse the repository at this point in the history
  • Loading branch information
iphydf committed Mar 23, 2022
1 parent 2dcb946 commit 9248fda
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 6 deletions.
2 changes: 1 addition & 1 deletion other/bootstrap_daemon/docker/tox-bootstrapd.sha256
Original file line number Diff line number Diff line change
@@ -1 +1 @@
591106a972c27f19e72bd8927964e1ecc57976f4f4ff538699eaf3eb6236f9ea /usr/local/bin/tox-bootstrapd
ea4c271badeb89030e90c43e18507166fade28a924feb8fd5bfbd3f0e5f7c8d3 /usr/local/bin/tox-bootstrapd
2 changes: 2 additions & 0 deletions other/bootstrap_daemon/websocket/websockify/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")

package(features = ["-layering_check"])

go_library(
name = "go_default_library",
srcs = ["websockify.go"],
Expand Down
23 changes: 23 additions & 0 deletions testing/fuzzing/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
load("@rules_cc//cc:defs.bzl", "cc_library")
load("@rules_fuzzing//fuzzing:cc_defs.bzl", "cc_fuzz_test")

cc_library(
name = "fuzz_adapter",
srcs = ["fuzz_adapter.c"],
hdrs = ["fuzz_adapter.h"],
visibility = ["//c-toxcore:__subpackages__"],
)

cc_fuzz_test(
name = "bootstrap_fuzzer",
srcs = ["bootstrap_harness.cc"],
corpus = ["//tools/toktok-fuzzer/corpus:bootstrap_fuzzer"],
deps = ["//c-toxcore/toxcore:tox"],
)

cc_fuzz_test(
name = "toxsave_fuzz_test",
srcs = ["toxsave_harness.cc"],
corpus = ["//tools/toktok-fuzzer/corpus:toxsave_fuzzer"],
deps = ["//c-toxcore/toxcore:tox"],
)
3 changes: 2 additions & 1 deletion testing/fuzzing/bootstrap_harness.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
#include "../../toxcore/tox.h"
#include "fuzz_adapter.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
network_adapter_init(data, size);

Tox_Err_New error_new;
Tox *tox = tox_new(NULL, &error_new);
Tox *tox = tox_new(nullptr, &error_new);

assert(tox != nullptr);
assert(error_new == TOX_ERR_NEW_OK);
Expand Down
2 changes: 1 addition & 1 deletion testing/fuzzing/fuzz_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ ssize_t fuzz_recvfrom(int sockfd, void *buf, size_t len,
src_addr->sa_family = AF_INET;

// We want an AF_INET address with dummy values
struct sockaddr_in *addr_in = (struct sockaddr_in *) src_addr;
struct sockaddr_in *addr_in = (struct sockaddr_in *)(void *)src_addr;
addr_in->sin_port = 12356;
addr_in->sin_addr.s_addr = INADDR_LOOPBACK + 1;
*addr_len = sizeof(struct sockaddr);
Expand Down
1 change: 1 addition & 0 deletions testing/fuzzing/toxsave_harness.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "../../toxcore/tox.h"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
Tox_Err_Options_New error_options;
Expand Down
3 changes: 3 additions & 0 deletions toxcore/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ cc_library(
visibility = ["//c-toxcore:__subpackages__"],
deps = [
":ccompat",
"//c-toxcore/testing/fuzzing:fuzz_adapter",
"@libsodium",
],
)
Expand Down Expand Up @@ -121,6 +122,7 @@ cc_library(
],
deps = [
":ccompat",
"//c-toxcore/testing/fuzzing:fuzz_adapter",
"@pthread",
],
)
Expand Down Expand Up @@ -169,6 +171,7 @@ cc_library(
":logger",
":mono_time",
":util",
"//c-toxcore/testing/fuzzing:fuzz_adapter",
"@libsodium",
"@psocket",
"@pthread",
Expand Down
8 changes: 5 additions & 3 deletions toxcore/network.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,12 @@ static bool should_ignore_recv_error(int err)
return err == EWOULDBLOCK;
}

#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
static bool should_ignore_connect_error(int err)
{
return err == EWOULDBLOCK || err == EINPROGRESS;
}
#endif

non_null()
static const char *inet_ntop4(const struct in_addr *addr, char *buf, size_t bufsize)
Expand Down Expand Up @@ -1033,7 +1035,7 @@ Networking_Core *new_networking_ex(const Logger *log, const IP *ip, uint16_t por

for (uint16_t tries = port_from; tries <= port_to; ++tries) {
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
int res = 0;
int res = addrsize > 0 ? 0 : -1;
#else
int res = bind(temp->sock.sock, (struct sockaddr *)&addr, addrsize);
#endif
Expand Down Expand Up @@ -1459,7 +1461,7 @@ bool net_connect(const Logger *log, Socket sock, const IP_Port *ip_port)
}

#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
return true;
return addrsize != 0;
#else
LOGGER_DEBUG(log, "connecting socket %d to %s:%d",
(int)sock.sock, ip_ntoa(&ip_port->ip, ip_str, sizeof(ip_str)), net_ntohs(ip_port->port));
Expand Down Expand Up @@ -1610,7 +1612,7 @@ bool bind_to_port(Socket sock, Family family, uint16_t port)
}

#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
return true;
return addrsize != 0;
#else
return bind(sock.sock, (struct sockaddr *)&addr, addrsize) == 0;
#endif
Expand Down

0 comments on commit 9248fda

Please sign in to comment.