From 5b9f68e0d3e4861b1b92e66d6be3a6169f9f4874 Mon Sep 17 00:00:00 2001
From: AntiCat <contiki@anticat.ch>
Date: Wed, 24 May 2017 23:08:57 +0200
Subject: [PATCH 13/13] NFC-HAL: Fixed integer underflow

---
 targetlibs/nrf5x/components/nfc/t2t_lib/hal_t2t/hal_nfc_t2t.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/targetlibs/nrf5x/components/nfc/t2t_lib/hal_t2t/hal_nfc_t2t.c b/targetlibs/nrf5x/components/nfc/t2t_lib/hal_t2t/hal_nfc_t2t.c
index a39dfeb7..335a76aa 100755
--- a/targetlibs/nrf5x/components/nfc/t2t_lib/hal_t2t/hal_nfc_t2t.c
+++ b/targetlibs/nrf5x/components/nfc/t2t_lib/hal_t2t/hal_nfc_t2t.c
@@ -680,9 +680,18 @@ void NFCT_IRQHandler(void)
     {
         /* Take into account only number of whole bytes */
         uint32_t rx_data_size = ((NRF_NFCT->RXD.AMOUNT & NFCT_RXD_AMOUNT_RXDATABYTES_Msk) >>
-                                 NFCT_RXD_AMOUNT_RXDATABYTES_Pos) - NFC_CRC_SIZE;
+                                 NFCT_RXD_AMOUNT_RXDATABYTES_Pos);
+
+        /* Prevent integer underflow */
+        if(rx_data_size >= NFC_CRC_SIZE) rx_data_size -= NFC_CRC_SIZE;
+
         nrf_nfct_event_clear(&NRF_NFCT->EVENTS_RXFRAMEEND);
 
+        /* Frame is garbage, wait for next frame reception */
+        if(rx_data_size == 0)
+        {
+          NRF_NFCT->TASKS_ENABLERXDATA = 1;
+        } else
         /* Indicate that SLP_REQ was received - this will cause FRAMEDELAYTIMEOUT error */
         if(m_nfc_rx_buffer[0] == NFC_SLP_REQ_CMD)
         {
-- 
2.13.0

