diff --git a/sam_api.c b/sam_api.c index 238964c..338cc2d 100644 --- a/sam_api.c +++ b/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; }