• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 GkiUtilsInterface* gki_utils = nullptr;
10 
11 tNFA_DM_CB nfa_dm_cb = {};
12 bool ndef_handler_registered = false;
13 
ndef_cback(tNFA_NDEF_EVT event,tNFA_NDEF_EVT_DATA * p_data)14 static void ndef_cback(tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA* p_data) {
15   if (event == NFA_NDEF_REGISTER_EVT) {
16     ndef_handler_registered = (p_data->ndef_reg.status == NFC_STATUS_OK);
17   } else if (event == NFA_NDEF_DATA_EVT) {
18     FUZZLOG("ndef_data, start=%p, len=%d", p_data->ndef_data.p_data,
19             p_data->ndef_data.len);
20 
21     uint16_t cs = 0;
22     for (uint8_t* p = p_data->ndef_data.p_data;
23          p < p_data->ndef_data.p_data + p_data->ndef_data.len; p++) {
24       cs += *p;
25     }
26 
27     FUZZLOG("ndef_data, checksum=%04X", cs);
28   }
29 }
30 
31 tNFA_DM_MSG reg_hdler = {.reg_ndef_hdlr = {
32                              .tnf = NFA_TNF_DEFAULT,
33                              .p_ndef_cback = ndef_cback,
34                          }};
35 
init()36 static bool init() {
37   if (!ndef_handler_registered) {
38     nfa_dm_ndef_reg_hdlr(&reg_hdler);
39   }
40   return ndef_handler_registered;
41 }
42 
Fuzz_FixPackets(std::vector<bytes_t> &,uint)43 void Fuzz_FixPackets(std::vector<bytes_t>& /*Packets*/, uint /*Seed*/) {}
44 
Fuzz_RunPackets(const std::vector<bytes_t> & Packets)45 void Fuzz_RunPackets(const std::vector<bytes_t>& Packets) {
46   if (!init()) {
47     return;
48   }
49 
50   for (auto it = Packets.cbegin(); it != Packets.cend(); ++it) {
51     nfa_dm_ndef_handle_message(NFA_STATUS_OK, const_cast<uint8_t*>(it->data()),
52                                (uint32_t)it->size());
53   }
54 }
55