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(®_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