1 #include "fuzz_cmn.h"
2 #include "nfa_api.h"
3 #include "nfa_dm_int.h"
4
5 #define MODULE_NAME "nfc_ndef_fuzzer"
6
7 const char fuzzer_name[] = MODULE_NAME;
8
9 tNFA_DM_CB nfa_dm_cb = {};
10 bool ndef_handler_registered = false;
11
ndef_cback(tNFA_NDEF_EVT event,tNFA_NDEF_EVT_DATA * p_data)12 static void ndef_cback(tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA* p_data) {
13 if (event == NFA_NDEF_REGISTER_EVT) {
14 ndef_handler_registered = (p_data->ndef_reg.status == NFC_STATUS_OK);
15 } else if (event == NFA_NDEF_DATA_EVT) {
16 FUZZLOG("ndef_data, start=%p, len=%d", p_data->ndef_data.p_data,
17 p_data->ndef_data.len);
18
19 uint16_t cs = 0;
20 for (uint8_t* p = p_data->ndef_data.p_data;
21 p < p_data->ndef_data.p_data + p_data->ndef_data.len; p++) {
22 cs += *p;
23 }
24
25 FUZZLOG("ndef_data, checksum=%04X", cs);
26 }
27 }
28
29 tNFA_DM_MSG reg_hdler = {.reg_ndef_hdlr = {
30 .tnf = NFA_TNF_DEFAULT,
31 .p_ndef_cback = ndef_cback,
32 }};
33
init()34 static bool init() {
35 if (!ndef_handler_registered) {
36 nfa_dm_ndef_reg_hdlr(®_hdler);
37 }
38 return ndef_handler_registered;
39 }
40
Fuzz_FixPackets(std::vector<bytes_t> &,uint)41 void Fuzz_FixPackets(std::vector<bytes_t>& /*Packets*/, uint /*Seed*/) {}
42
Fuzz_RunPackets(const std::vector<bytes_t> & Packets)43 void Fuzz_RunPackets(const std::vector<bytes_t>& Packets) {
44 if (!init()) {
45 return;
46 }
47
48 for (auto it = Packets.cbegin(); it != Packets.cend(); ++it) {
49 nfa_dm_ndef_handle_message(NFA_STATUS_OK, const_cast<uint8_t*>(it->data()),
50 (uint32_t)it->size());
51 }
52 }
53