From fc4e912fc1d42e13a8f858072ee7b2513ed84d4b Mon Sep 17 00:00:00 2001 From: DidierA <1620015+DidierA@users.noreply.github.com> Date: Fri, 3 Mar 2023 17:33:38 +0100 Subject: [PATCH] MifareFesFireGetInformation(): warningw when tag answer is too short --- armsrc/mifaredesfire.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/armsrc/mifaredesfire.c b/armsrc/mifaredesfire.c index 3530dfd9b..04de05f21 100644 --- a/armsrc/mifaredesfire.c +++ b/armsrc/mifaredesfire.c @@ -182,6 +182,12 @@ void MifareDesfireGetInformation(void) { return; } + if (len < sizeof(payload.versionHW)+1) { + Dbprintf("Tag answer to MFDES_GET_VERSION was too short: data in Hardware Information is probably invalid."); + print_result("Answer", resp, len); + memset(resp+len, 0xFF, sizeof(payload.versionHW)+1 - len); // clear remaining bytes + } + memcpy(payload.versionHW, resp + 1, sizeof(payload.versionHW)); // ADDITION_FRAME 1 @@ -194,6 +200,13 @@ void MifareDesfireGetInformation(void) { switch_off(); return; } + + if (len < sizeof(payload.versionSW)+1) { + Dbprintf("Tag answer to MFDES_ADDITIONAL_FRAME 1 was too short: data in Software Information is probably invalid."); + print_result("Answer", resp, len); + memset(resp+len, 0xFF, sizeof(payload.versionSW)+1 - len); // clear remaining bytes + } + memcpy(payload.versionSW, resp + 1, sizeof(payload.versionSW)); // ADDITION_FRAME 2 @@ -206,6 +219,12 @@ void MifareDesfireGetInformation(void) { return; } + if (len < sizeof(payload.details)+1) { + Dbprintf("Tag answer to MFDES_ADDITIONAL_FRAME 2 was too short: data in Batch number and Production date is probably invalid"); + print_result("Answer", resp, len); + memset(resp+len, 0xFF, sizeof(payload.details)+1 - len); // clear remaining bytes + } + memcpy(payload.details, resp + 1, sizeof(payload.details)); LED_B_ON();