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(&reg_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