فهرست منبع

use malloc for seader_send_apdu

Eric Betts 1 سال پیش
والد
کامیت
0d677d5bea
1فایلهای تغییر یافته به همراه8 افزوده شده و 2 حذف شده
  1. 8 2
      sam_api.c

+ 8 - 2
sam_api.c

@@ -157,7 +157,13 @@ bool seader_send_apdu(
         return false;
     }
 
-    uint8_t apdu[SEADER_UART_RX_BUF_SIZE];
+    uint8_t length = APDU_HEADER_LEN + payloadLen;
+    uint8_t *apdu = malloc(length);
+    if(!apdu) {
+        FURI_LOG_E(TAG, "Failed to allocate memory for apdu in seader_send_apdu");
+        return false;
+    }
+
     apdu[0] = CLA;
     apdu[1] = INS;
     apdu[2] = P1;
@@ -172,7 +178,6 @@ bool seader_send_apdu(
     }
 
     memcpy(apdu + APDU_HEADER_LEN, payload, payloadLen);
-    uint8_t length = APDU_HEADER_LEN + payloadLen;
 
     memset(display, 0, sizeof(display));
     for(uint8_t i = 0; i < length; i++) {
@@ -185,6 +190,7 @@ bool seader_send_apdu(
     } else {
         seader_ccid_XfrBlock(seader_uart, apdu, length);
     }
+    free(apdu);
 
     return true;
 }