summaryrefslogtreecommitdiff
path: root/tests/fuzz/test-fuzz.c
blob: 9922ff9de609d6d4096c0e56137c2c674c3c8bdb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <limits.h>

#include <libubox/blob.h>
#include <libubox/blobmsg.h>

#include "ubusmsg.h"
#include "libubus.h"
#include "libubus-internal.h"

static void _ubus_validate_hdr(const uint8_t *data, size_t size)
{
	if (size > sizeof(struct ubus_msghdr))
		return;

	ubus_validate_hdr((struct ubus_msghdr *) data);
}

static void _ubus_parse_msg(const uint8_t *data, size_t size)
{
	struct blob_attr *attr = (struct blob_attr *) data;

	if (size < sizeof(struct blob_attr *))
		return;

	if (blob_pad_len(attr) > UBUS_MAX_MSGLEN)
		return;

	ubus_parse_msg(attr);
}

int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
	_ubus_validate_hdr(data, size);
	_ubus_parse_msg(data, size);

	return 0;
}