forked from Green-Sky/tomato
Squashed 'external/toxcore/c-toxcore/' changes from 6d634674a9..73d9b845a3
73d9b845a3 cleanup: Remove old type-ordered event getters. b0840cc02d feat: add ngc events 7df9a51349 refactor: Make event dispatch ordered by receive time. bcb6592af5 test: Add C++ classes wrapping system interfaces. 4cea4f9ca4 fix: Make all the fuzzers work again, and add a test for protodump. c4e209ea1d refactor: Factor out malloc+memcpy into memdup. 87bcc4322d fix: Remove fatal error for non-erroneous case REVERT: 6d634674a9 cleanup: Remove old type-ordered event getters. REVERT: d1d48d1dfc feat: add ngc events REVERT: 994ffecc6b refactor: Make event dispatch ordered by receive time. git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: 73d9b845a310c3f56d2d6d77ed56b93d84256d6e
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "../testing/fuzzing/fuzz_support.h"
|
||||
#include "mem_test_util.hh"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -19,7 +20,7 @@ void TestUnpackAnnouncesList(Fuzz_Data &input)
|
||||
CONSUME1_OR_RETURN(const uint16_t, packed_size, input);
|
||||
|
||||
Logger *logger = logger_new();
|
||||
if (gca_unpack_announces_list(logger, input.data, input.size, announces.data(), max_count)
|
||||
if (gca_unpack_announces_list(logger, input.data(), input.size(), announces.data(), max_count)
|
||||
!= -1) {
|
||||
// Always allocate at least something to avoid passing nullptr to functions below.
|
||||
std::vector<uint8_t> packed(packed_size + 1);
|
||||
@ -38,7 +39,7 @@ void TestUnpackPublicAnnounce(Fuzz_Data &input)
|
||||
CONSUME1_OR_RETURN(const uint16_t, packed_size, input);
|
||||
|
||||
Logger *logger = logger_new();
|
||||
if (gca_unpack_public_announce(logger, input.data, input.size, &public_announce) != -1) {
|
||||
if (gca_unpack_public_announce(logger, input.data(), input.size(), &public_announce) != -1) {
|
||||
// Always allocate at least something to avoid passing nullptr to functions below.
|
||||
std::vector<uint8_t> packed(packed_size + 1);
|
||||
gca_pack_public_announce(logger, packed.data(), packed_size, &public_announce);
|
||||
@ -48,19 +49,19 @@ void TestUnpackPublicAnnounce(Fuzz_Data &input)
|
||||
|
||||
void TestDoGca(Fuzz_Data &input)
|
||||
{
|
||||
const Memory *mem = system_memory();
|
||||
Test_Memory mem;
|
||||
std::unique_ptr<Logger, void (*)(Logger *)> logger(logger_new(), logger_kill);
|
||||
std::unique_ptr<Mono_Time, std::function<void(Mono_Time *)>> mono_time(
|
||||
mono_time_new(mem, nullptr, nullptr), [mem](Mono_Time *ptr) { mono_time_free(mem, ptr); });
|
||||
assert(mono_time != nullptr);
|
||||
|
||||
uint64_t clock = 1;
|
||||
mono_time_set_current_time_callback(
|
||||
mono_time.get(), [](void *user_data) { return *static_cast<uint64_t *>(user_data); },
|
||||
&clock);
|
||||
std::unique_ptr<Mono_Time, std::function<void(Mono_Time *)>> mono_time(
|
||||
mono_time_new(
|
||||
mem, [](void *user_data) { return *static_cast<uint64_t *>(user_data); }, &clock),
|
||||
[mem](Mono_Time *ptr) { mono_time_free(mem, ptr); });
|
||||
assert(mono_time != nullptr);
|
||||
std::unique_ptr<GC_Announces_List, void (*)(GC_Announces_List *)> gca(new_gca_list(), kill_gca);
|
||||
assert(gca != nullptr);
|
||||
|
||||
while (input.size > 0) {
|
||||
while (!input.empty()) {
|
||||
CONSUME1_OR_RETURN(const uint8_t, choice, input);
|
||||
switch (choice) {
|
||||
case 0: {
|
||||
@ -84,7 +85,8 @@ void TestDoGca(Fuzz_Data &input)
|
||||
case 2: {
|
||||
// Get announces.
|
||||
CONSUME1_OR_RETURN(const uint8_t, max_nodes, input);
|
||||
std::vector<GC_Announce> gc_announces(max_nodes);
|
||||
// Always allocate at least something to avoid passing nullptr to functions below.
|
||||
std::vector<GC_Announce> gc_announces(max_nodes + 1);
|
||||
CONSUME_OR_RETURN(const uint8_t *chat_id, input, CHAT_ID_SIZE);
|
||||
CONSUME_OR_RETURN(const uint8_t *except_public_key, input, ENC_PUBLIC_KEY_SIZE);
|
||||
gca_get_announces(
|
||||
@ -106,6 +108,6 @@ void TestDoGca(Fuzz_Data &input)
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
fuzz_select_target(data, size, TestUnpackAnnouncesList, TestUnpackPublicAnnounce, TestDoGca);
|
||||
fuzz_select_target<TestUnpackAnnouncesList, TestUnpackPublicAnnounce, TestDoGca>(data, size);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user