[FL-3643] Fix crash when reading files > 64B (#3166)

* Increase MF DESFire result buffer
* Ignore chunks that do not fit into the result buffer and show warning
* Display information about partial files

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Georgii Surkov
2023-10-28 17:29:14 +03:00
committed by GitHub
parent 3d872cf37a
commit cfaf745523
3 changed files with 32 additions and 7 deletions

View File

@@ -6,7 +6,8 @@
#define TAG "MfDesfirePoller"
#define MF_DESFIRE_BUF_SIZE_MAX (64U)
#define MF_DESFIRE_BUF_SIZE (64U)
#define MF_DESFIRE_RESULT_BUF_SIZE (512U)
typedef NfcCommand (*MfDesfirePollerReadHandler)(MfDesfirePoller* instance);
@@ -20,10 +21,10 @@ static MfDesfirePoller* mf_desfire_poller_alloc(Iso14443_4aPoller* iso14443_4a_p
MfDesfirePoller* instance = malloc(sizeof(MfDesfirePoller));
instance->iso14443_4a_poller = iso14443_4a_poller;
instance->data = mf_desfire_alloc();
instance->tx_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE_MAX);
instance->rx_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE_MAX);
instance->input_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE_MAX);
instance->result_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE_MAX);
instance->tx_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE);
instance->rx_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE);
instance->input_buffer = bit_buffer_alloc(MF_DESFIRE_BUF_SIZE);
instance->result_buffer = bit_buffer_alloc(MF_DESFIRE_RESULT_BUF_SIZE);
instance->mf_desfire_event.data = &instance->mf_desfire_event_data;