From ebffb48cd3a1e063f9353e75e44b893d892484d8 Mon Sep 17 00:00:00 2001 From: pscott Date: Wed, 28 Apr 2021 10:48:18 +0200 Subject: [PATCH] Use snprintf instead of u32_to_str --- src/utils.c | 39 ------------------------------ src/utils.h | 3 --- src_features/signTx/logic_signTx.c | 8 +++++- 3 files changed, 7 insertions(+), 43 deletions(-) diff --git a/src/utils.c b/src/utils.c index 9c16b6f..b319736 100644 --- a/src/utils.c +++ b/src/utils.c @@ -72,45 +72,6 @@ uint32_t u32_from_BE(uint8_t *in, uint8_t size, bool strict) { return res; } -// Converts a uint32_t to a string. -void u32_to_str(char *dest, uint32_t in, uint8_t dest_size) { - uint8_t i = 0; - - // Get the first digit (in case it's 0). - dest[i] = in % 10 + '0'; - in /= 10; - i++; - - // Get every digit. - while (in != 0) { - if (i >= dest_size) { - THROW(6502); - } - dest[i] = in % 10 + '0'; - in /= 10; - i++; - } - - // Null terminate the string. - dest[i] = '\0'; - i--; - - // Reverse the string - uint8_t end = i; - char tmp; - i = 0; - while (i < end) { - // Swap the first and last elements. - tmp = dest[i]; - dest[i] = dest[end]; - dest[end] = tmp; - - // Decrease the interval size. - i++; - end--; - } -} - void amountToString(uint8_t *amount, uint8_t amount_size, uint8_t decimals, diff --git a/src/utils.h b/src/utils.h index b7d3118..ba878e1 100644 --- a/src/utils.h +++ b/src/utils.h @@ -28,9 +28,6 @@ void convertUint256BE(uint8_t* data, uint32_t length, uint256_t* target); int local_strchr(char* string, char ch); -// `itoa` for uint32_t. -void u32_to_str(char* dest, uint8_t dest_size, uint32_t in); - // Converts a list of bytes (in BE) of length `size` to a uint32_t. `strict` will make the function // throw if the size is > 4. uint32_t u32_from_BE(uint8_t* in, uint8_t size, bool strict); diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 002f21e..9a5dc42 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -389,7 +389,13 @@ void finalizeParsing(bool direct) { if (genericUI) { if (txContext.txType == LEGACY) { uint32_t id = u32_from_BE(txContext.content->v, txContext.content->vLength, true); - u32_to_str((char *) strings.common.chainID, sizeof(strings.common.chainID), id); + uint8_t res = + snprintf(strings.common.chainID, sizeof(strings.common.chainID), "%u", id); + if (res >= sizeof(strings.common.chainID)) { + // If the return value is higher or equal to the size passed in as parameter, then + // the output was truncated. Return the appropriate error code. + THROW(0x6502); + } } else if (txContext.txType == EIP2930) { uint256_t chainID; convertUint256BE(tmpContent.txContent.chainID.value,