From d3840079123bdc7dd91317731c1fabd29ea91515 Mon Sep 17 00:00:00 2001 From: Jorge Martins Date: Tue, 9 Aug 2022 11:09:51 +0200 Subject: [PATCH] Fix feesToString buffer overflow --- src_features/signTx/logic_signTx.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index d7e9767..774d1a1 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -231,15 +231,26 @@ static void feesToString(uint256_t *rawFee, char *displayBuffer, uint32_t displa i = 0; tickerOffset = 0; memset(displayBuffer, 0, displayBufferSize); + while (feeTicker[tickerOffset]) { + if ((uint32_t) tickerOffset >= displayBufferSize) { + break; + } + displayBuffer[tickerOffset] = feeTicker[tickerOffset]; tickerOffset++; } while (G_io_apdu_buffer[i]) { + if ((uint32_t) (tickerOffset) + i >= displayBufferSize) { + break; + } displayBuffer[tickerOffset + i] = G_io_apdu_buffer[i]; i++; } - displayBuffer[tickerOffset + i] = '\0'; + + if ((uint32_t) (tickerOffset) + i < displayBufferSize) { + displayBuffer[tickerOffset + i] = '\0'; + } } // Compute the fees, transform it to a string, prepend a ticker to it and copy everything to