blob: 70c5c94c7c557c8d64b39f5d83a9b4eefeaac0b9 [file] [log] [blame]
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <ctype.h>
#include "srp.h"
#include "dns-msg.h"
#include "ioloop.h"
#include "srp-gw.h"
#include "srp-proxy.h"
#include "srp-mdns-proxy.h"
#include "route.h"
#ifdef FUZZING_ICMP_CALLBACK
void icmp_callback(io_t *io, void *context);
extern interface_t *interfaces;
extern char *thread_interface_name;
interface_t interface = {0};
void hexdump(const char* Data, ssize_t Length) {
for(ssize_t i = 0; i < Length; i++) {
dprintf(2, "%02x", (unsigned char) Data[i]);
}
dprintf(2, "\n");
}
int LLVMFuzzerInitialize(int *argc, char ***argv) {
interfaces = &interface;
interface.next = 0;
interface.name = "fuzz0";
// interface.deconfigure_wakeup = calloc(sizeof(interface.deconfigure_wakeup), 1);
thread_interface_name = "fuzz0";
return 0;
}
int LLVMFuzzerTestOneInput(const char* Data, const size_t Length)
{
io_t io = {0};
ssize_t written = 0;
// Minimum size for ICMP header
if(Length < 8) {
return 0;
}
// hexdump(Data, Length);
int filedes[2];
if(pipe(filedes)) {
perror("pipe(2) failed!");
return 1;
}
written = write(filedes[1], Data, Length);
if(written <= 0) {
return 1;
}
io.fd = filedes[0];
icmp_callback(&io, 0);
close(filedes[0]);
close(filedes[1]);
return 0;
}
#endif