Skip to content

Commit 241c884

Browse files
Merge pull request #639 from Cypherock/revert-637-hotfix/apdu-exchange/stack-overflow
Revert "fix: Adds length validation in fragment apdu exchange process"
2 parents 15acf38 + 4b0fba5 commit 241c884

1 file changed

Lines changed: 5 additions & 16 deletions

File tree

  • common/interfaces/card_interface

common/interfaces/card_interface/nfc.c

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -669,9 +669,6 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
669669
ASSERT(recv_len != NULL);
670670
ASSERT(send_len != 0);
671671

672-
uint8_t expected_recv_len = *recv_len;
673-
*recv_len = 0;
674-
675672
ret_code_t err_code = adafruit_diagnose_card_presence();
676673
if (err_code != 0)
677674
return NFC_CARD_ABSENT;
@@ -696,10 +693,8 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
696693

697694
total_packets = ceil(send_len / (1.0 * SEND_PACKET_MAX_LEN));
698695
for (int packet = 1; packet <= total_packets;) {
699-
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN <= expected_recv_len
700-
? RECV_PACKET_MAX_ENC_LEN
701-
: expected_recv_len; /* On every request set acceptable
702-
packet length */
696+
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN; /* On every request set acceptable
697+
packet length */
703698

704699
/**
705700
* Sets appropriate CLA byte for each packet. CLA byte (first byte of
@@ -762,14 +757,11 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
762757

763758
/** Prepare to request next packet from the card */
764759
*recv_len = recv_pkt_len;
765-
uint8_t remaining_recv_len = expected_recv_len - *recv_len + 2;
766-
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN <= remaining_recv_len
767-
? RECV_PACKET_MAX_ENC_LEN
768-
: remaining_recv_len;
760+
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN;
769761
request_chain_pkt[2] = ceil(*recv_len * 1.0 / RECV_PACKET_MAX_LEN);
770762

771763
/** Request all the remaining packets of multi-packet response */
772-
while (recv_apdu[*recv_len - 2] == 0x61 && recv_pkt_len > 0) {
764+
while (recv_apdu[*recv_len - 2] == 0x61) {
773765
*recv_len -= 2;
774766
err_code = adafruit_pn532_in_data_exchange(request_chain_pkt,
775767
sizeof(request_chain_pkt),
@@ -795,10 +787,7 @@ ret_code_t nfc_exchange_apdu(uint8_t *send_apdu,
795787

796788
/** Prepare to request next packet from the card */
797789
*recv_len += recv_pkt_len;
798-
remaining_recv_len = expected_recv_len - *recv_len + 2;
799-
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN <= remaining_recv_len
800-
? RECV_PACKET_MAX_ENC_LEN
801-
: remaining_recv_len;
790+
recv_pkt_len = RECV_PACKET_MAX_ENC_LEN;
802791
request_chain_pkt[2] = *recv_len / RECV_PACKET_MAX_LEN + 1;
803792
}
804793

0 commit comments

Comments
 (0)