1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-25 16:08:32 +00:00

fix(legacy): fix token error cases

This commit is contained in:
Martin Novak 2022-11-10 13:35:15 +01:00
parent 865765db91
commit afce401fa2

View File

@ -259,7 +259,25 @@ bool _get_EthereumNetworkInfo(
return true; return true;
} }
void _get_EthereumTokenInfo( void _set_EthereumTokenInfo(const EthereumTokenInfo *ref_token, EthereumTokenInfo *token) {
// reset
memzero(token->symbol, sizeof(token->symbol));
token->decimals = 0;
memzero(token->address.bytes, sizeof(token->address.bytes));
token->address.size = 0;
token->chain_id = CHAIN_ID_UNKNOWN;
memzero(token->name, sizeof(token->name));
// copy data to token definition
strncpy(token->symbol, ref_token->symbol, sizeof(token->symbol) - 1);
token->decimals = ref_token->decimals;
memcpy(token->address.bytes, ref_token->address.bytes,
sizeof(token->address.bytes));
token->address.size = sizeof(token->address.bytes);
token->chain_id = ref_token->chain_id;
}
bool _get_EthereumTokenInfo(
const EthereumDefinitions_encoded_token_t *encoded_token, const EthereumDefinitions_encoded_token_t *encoded_token,
const uint64_t ref_chain_id, const char *ref_address, const uint64_t ref_chain_id, const char *ref_address,
EthereumTokenInfo *token) { EthereumTokenInfo *token) {
@ -290,27 +308,22 @@ void _get_EthereumTokenInfo(
memmove(&token->symbol[1], &token->symbol, sizeof(token->symbol) - 2); memmove(&token->symbol[1], &token->symbol, sizeof(token->symbol) - 2);
token->symbol[0] = ' '; token->symbol[0] = ' ';
token->symbol[sizeof(token->symbol) - 1] = 0; token->symbol[sizeof(token->symbol) - 1] = 0;
return; return true;
} else {
fsm_sendFailure(FailureType_Failure_DataError,
_("Token definition mismatch"));
} }
} }
// decoding failed or token definition has different
// chain_id and/or address
_set_EthereumTokenInfo(UnknownToken, token);
return false;
} }
// decoding did not happen or failed, so we have to copy the data to the // copy result
// result reset token definition _set_EthereumTokenInfo(builtin, token);
memzero(token->symbol, sizeof(token->symbol)); return true;
token->decimals = 0;
memzero(token->address.bytes, sizeof(token->address.bytes));
token->address.size = 0;
token->chain_id = CHAIN_ID_UNKNOWN;
memzero(token->name, sizeof(token->name));
// copy data to token definition
strncpy(token->symbol, builtin->symbol, sizeof(token->symbol) - 1);
token->decimals = builtin->decimals;
memcpy(token->address.bytes, builtin->address.bytes,
sizeof(token->address.bytes));
token->address.size = sizeof(token->address.bytes);
token->chain_id = builtin->chain_id;
} }
const EthereumDefinitionsDecoded *get_EthereumDefinitionsDecoded( const EthereumDefinitionsDecoded *get_EthereumDefinitionsDecoded(
@ -327,12 +340,14 @@ const EthereumDefinitionsDecoded *get_EthereumDefinitionsDecoded(
if (strncmp(defs.network.shortcut, UNKNOWN_NETWORK_SHORTCUT, if (strncmp(defs.network.shortcut, UNKNOWN_NETWORK_SHORTCUT,
sizeof(defs.network.shortcut)) != 0) { sizeof(defs.network.shortcut)) != 0) {
// we have found network definition, we can try to load token definition // we have found network definition, we can try to load token definition
_get_EthereumTokenInfo(encoded_token, ref_chain_id, ref_address, if (!_get_EthereumTokenInfo(encoded_token, ref_chain_id, ref_address,
&defs.token); &defs.token)) {
return NULL;
}
} else { } else {
// if we did not find any network definition, set token definition to // if we did not find any network definition, set token definition to
// unknown token // unknown token
_get_EthereumTokenInfo(NULL, CHAIN_ID_UNKNOWN, NULL, &defs.token); _set_EthereumTokenInfo(UnknownToken, &defs.token);
} }
return &defs; return &defs;
} }