mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
[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:
@@ -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;
|
||||
|
||||
|
||||
@@ -59,7 +59,15 @@ MfDesfireError mf_desfire_send_chunks(
|
||||
break;
|
||||
}
|
||||
|
||||
bit_buffer_append_right(rx_buffer, instance->rx_buffer, sizeof(uint8_t));
|
||||
const size_t rx_size = bit_buffer_get_size_bytes(instance->rx_buffer);
|
||||
const size_t rx_capacity_remaining =
|
||||
bit_buffer_get_capacity_bytes(rx_buffer) - bit_buffer_get_size_bytes(rx_buffer);
|
||||
|
||||
if(rx_size <= rx_capacity_remaining) {
|
||||
bit_buffer_append_right(rx_buffer, instance->rx_buffer, sizeof(uint8_t));
|
||||
} else {
|
||||
FURI_LOG_W(TAG, "RX buffer overflow: ignoring %zu bytes", rx_size);
|
||||
}
|
||||
}
|
||||
} while(false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user