From e4957716021cc279b2f32bba2c9b4e49a212bd40 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Sun, 13 Sep 2020 15:42:25 +0200 Subject: [PATCH] return an error when READBLOCK goes beyond tag size during emulation --- armsrc/iso15693.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index 8e86e432..bf2bedb6 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -2520,23 +2520,31 @@ void SimTagIso15693(uint32_t parameter, uint8_t *uid) { uint8_t block = cmd[2 + (addressed ? 8 : 0)]; if(!private) { - resp[0] = ISO15693_NOERROR; if(block < 8) { Dbprintf("READBLOCK %d", block); - } - else - { - Dbprintf("READBLOCK %d (beyond size)", block); - } - memcpy(&resp[1], &memory[4 * (block%8)], 4); - - crc = Iso15693Crc(resp, 5); - resp[5] = crc & 0xff; - resp[6] = crc >> 8; + + resp[0] = ISO15693_NOERROR; + memcpy(&resp[1], &memory[4 * (block%8)], 4); + + crc = Iso15693Crc(resp, 5); + resp[5] = crc & 0xff; + resp[6] = crc >> 8; - CodeIso15693AsTag(resp, sizeof(resp)); - TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + CodeIso15693AsTag(resp, sizeof(resp)); + TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + } else { + Dbprintf("READBLOCK %d (error, beyond size)", block); + + resp[0] = ISO15693_RES_ERROR; + resp[1] = ISO15693_ERROR_GENERIC; + crc = Iso15693Crc(resp, 2); + resp[2] = crc & 0xff; + resp[3] = crc >> 8; + + CodeIso15693AsTag(resp, 4); + TransmitTo15693Reader(ToSend, ToSendMax, &start_time, 0, slow); + } } else { Dbprintf("READBLOCK %d (won't answer, privacy mode)", block); }