mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-01 13:10:43 +00:00
Expose mip guts
This commit is contained in:
1 parent
eed25f23f6
commit
abfac8aa40
15 files changed
+222
-258
No files matched your search
+2
-6
@@ -1,10 +1,6 @@
|
||||
static bool my_random(void) {
|
||||
return mg_millis() & 1;
|
||||
}
|
||||
|
||||
static bool mock_init(uint8_t *mac, void *data) {
|
||||
(void) mac, (void) data;
|
||||
return my_random();
|
||||
return true;
|
||||
}
|
||||
|
||||
static size_t mock_tx(const void *buf, size_t len, void *data) {
|
||||
@@ -19,7 +15,7 @@ static size_t mock_rx(void *buf, size_t len, void *data) {
|
||||
|
||||
static bool mock_up(void *data) {
|
||||
(void) data;
|
||||
return my_random();
|
||||
return true;
|
||||
}
|
||||
|
||||
struct mip_driver mip_driver_mock = {mock_init, mock_tx, mock_rx, mock_up, 0};
|
||||
+9
-8
@@ -58,13 +58,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
mg_json_get(mg_str_n((char *) data, size), "$[0]", &n);
|
||||
|
||||
if (size > 0) {
|
||||
struct mip_cfg cfg = {{0,0,0,0,0,0}, 0x01020304, 255, 0x01010101};
|
||||
size_t pktlen = 1540;
|
||||
char t[sizeof(struct mip_if) + pktlen * 2 + 0 /* qlen */];
|
||||
struct mip_if *ifp = (struct mip_if *) t;
|
||||
struct mip_if mif = {.ip = 0x01020304,
|
||||
.mask = 255,
|
||||
.gw = 0x01010101,
|
||||
.driver = &mip_driver_mock};
|
||||
struct mg_mgr mgr;
|
||||
mg_mgr_init(&mgr);
|
||||
if_init(ifp, &mgr, &cfg, &mip_driver_mock, NULL, pktlen, 0);
|
||||
mip_init(&mgr, &mif);
|
||||
|
||||
// Make a copy of the random data, in order to modify it
|
||||
void *pkt = malloc(size);
|
||||
@@ -73,15 +73,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (size > sizeof(*eth)) {
|
||||
static size_t i;
|
||||
uint16_t eth_types[] = {0x800, 0x800, 0x806, 0x86dd};
|
||||
memcpy(eth->dst, ifp->mac, 6); // Set valid destination MAC
|
||||
memcpy(eth->dst, mif.mac, 6); // Set valid destination MAC
|
||||
eth->type = mg_htons(eth_types[i++]);
|
||||
if (i >= sizeof(eth_types) / sizeof(eth_types[0])) i = 0;
|
||||
}
|
||||
|
||||
mip_rx(ifp, pkt, size);
|
||||
mgr.priv = NULL; // Don't let Mongoose free() ifp
|
||||
mip_rx(&mif, pkt, size);
|
||||
mg_mgr_free(&mgr);
|
||||
free(pkt);
|
||||
free((char *) mif.rx.ptr);
|
||||
free((char *) mif.tx.ptr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
+2
-2
@@ -39,12 +39,12 @@ static void test_queue(void) {
|
||||
}
|
||||
|
||||
static void test_statechange(void) {
|
||||
uint8_t tx[1540];
|
||||
char tx[1540];
|
||||
struct mip_if iface;
|
||||
memset(&iface, 0, sizeof(iface));
|
||||
iface.ip = mg_htonl(0x01020304);
|
||||
iface.state = MIP_STATE_READY;
|
||||
iface.tx.buf = tx, iface.tx.len = sizeof(tx);
|
||||
iface.tx.ptr = tx, iface.tx.len = sizeof(tx);
|
||||
iface.driver = &mip_driver_mock;
|
||||
onstatechange(&iface);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user