From 2a16466acd3cffcd79f9efdd4dbccad5c428cd3a Mon Sep 17 00:00:00 2001 From: bluekiwidev <111331826+bluekiwidev@users.noreply.github.com> Date: Mon, 19 Jan 2026 09:07:58 +1300 Subject: [PATCH] Added checking for none/empty read results and return a safe payload string --- circuitpython/utils/mfrc522_utils.py | 32 ++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/circuitpython/utils/mfrc522_utils.py b/circuitpython/utils/mfrc522_utils.py index 68856a2..dfe34ae 100644 --- a/circuitpython/utils/mfrc522_utils.py +++ b/circuitpython/utils/mfrc522_utils.py @@ -1,4 +1,3 @@ - tag_types = {0: "nothing", 16: "MIFARE Classic 1K"} @@ -9,38 +8,53 @@ def read_rfid(rdr, address=8): # If no card found, return immediately if stat != rdr.OK: - return 0, [0] + return 0, "" # FOUND -> ASK FOR UID (stat, raw_uid) = rdr.anticoll() # If can't read UID, return immediately if stat != rdr.OK: - return 0, [0] + return 0, "" # UID RECEIVED uid = "0x" + "%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) # If failed to select tag, return immediately if rdr.select_tag(raw_uid) != rdr.OK: - return uid, [0] + return uid, "" # If authentication error, return immediately if rdr.auth(rdr.AUTHENT1A, address, rdr.KEY, raw_uid) != rdr.OK: - return uid, [0] + return uid, "" # READ data = rdr.read(address) + # If read returned None or empty, stop crypto and return safe payload + if not data: + try: + rdr.stop_crypto1() + except Exception: + pass + return uid, "" + # Format data as a string of hexadecimal numbers - data = " ".join("0x{:02x}".format(b) for b in data) + try: + data_str = " ".join("0x{:02x}".format(b) for b in data) + except Exception: + data_str = "" - rdr.stop_crypto1() - return uid, data + try: + rdr.stop_crypto1() + except Exception: + pass + + return uid, data_str except Exception as e: print("Error reading RFID tag:", e) - return 0, [0] + return 0, "" def write_rfid(rdr, uid, data, address=8):