Fix fees overwrite in starkware plugin (#198)

* increase display buffer size to handle Starkware master key and control size when using snprintf

* Bump version 1.9.6

* Fix broken tests

* Add first starkware tests

* Add some constants for starkware

* Update CHANGELOG.md
This commit is contained in:
Jean P
2021-09-29 18:39:10 +02:00
committed by GitHub
parent fa355a5d97
commit fb7204fb6c
34 changed files with 112 additions and 14 deletions

View File

@@ -167,6 +167,9 @@ typedef struct starkware_parameters_t {
} starkware_parameters_t;
#define STARK_KEY_LENGTH (2 + length * 2 + 1)
#define VAULT_ID_LENGTH 10
bool is_deversify_contract(const uint8_t *address) {
uint32_t offset = 0;
uint8_t i;
@@ -271,12 +274,21 @@ bool starkware_verify_nft_token_id(uint8_t *tokenId) {
return true;
}
void starkware_print_vault_id(uint32_t vaultId, char *destination) {
snprintf(destination, 10, "%d", vaultId);
void starkware_print_vault_id(uint32_t vaultId, char *destination, size_t max_length) {
if (VAULT_ID_LENGTH > max_length) {
os_sched_exit(EXCEPTION_OVERFLOW);
}
snprintf(destination, max_length, "%d", vaultId);
}
void starkware_print_stark_key(uint8_t *starkKey, char *destination) {
snprintf(destination, 70, "0x%.*H", 32, starkKey);
void starkware_print_stark_key(uint8_t *starkKey,
size_t length,
char *destination,
size_t max_length) {
if (STARK_KEY_LENGTH > max_length) {
os_sched_exit(EXCEPTION_OVERFLOW);
}
snprintf(destination, max_length, "0x%.*H", length, starkKey);
}
// TODO : rewrite as independant code
@@ -741,7 +753,10 @@ void starkware_plugin_call(int message, void *parameters) {
case STARKWARE_WITHDRAW_NFT:
case STARKWARE_WITHDRAW_NFT_TO:
strlcpy(msg->title, "Master Account", msg->titleLength);
starkware_print_stark_key(context->starkKey, msg->msg);
starkware_print_stark_key(context->starkKey,
sizeof(context->starkKey),
msg->msg,
msg->msgLength);
break;
default:
PRINTF("Unexpected screen %d for %d\n",
@@ -758,7 +773,10 @@ void starkware_plugin_call(int message, void *parameters) {
case STARKWARE_REGISTER_AND_DEPOSIT_TOKEN:
case STARKWARE_REGISTER_AND_DEPOSIT_ETH:
strlcpy(msg->title, "Master Account", msg->titleLength);
starkware_print_stark_key(context->starkKey, msg->msg);
starkware_print_stark_key(context->starkKey,
sizeof(context->starkKey),
msg->msg,
msg->msgLength);
break;
case STARKWARE_DEPOSIT_TOKEN:
@@ -772,7 +790,9 @@ void starkware_plugin_call(int message, void *parameters) {
case STARKWARE_DEPOSIT_NFT:
case STARKWARE_DEPOSIT_NFT_RECLAIM:
strlcpy(msg->title, "Token Account", msg->titleLength);
starkware_print_vault_id(U4BE(context->vaultId, 0), msg->msg);
starkware_print_vault_id(U4BE(context->vaultId, 0),
msg->msg,
msg->msgLength);
break;
case STARKWARE_WITHDRAW:
case STARKWARE_WITHDRAW_NFT:
@@ -806,7 +826,9 @@ void starkware_plugin_call(int message, void *parameters) {
switch (context->selectorIndex) {
case STARKWARE_ESCAPE:
strlcpy(msg->title, "Token Account", msg->titleLength);
starkware_print_vault_id(U4BE(context->vaultId, 0), msg->msg);
starkware_print_vault_id(U4BE(context->vaultId, 0),
msg->msg,
msg->msgLength);
break;
case STARKWARE_DEPOSIT_TOKEN:
case STARKWARE_DEPOSIT_ETH:
@@ -839,7 +861,9 @@ void starkware_plugin_call(int message, void *parameters) {
case STARKWARE_REGISTER_AND_DEPOSIT_TOKEN:
case STARKWARE_REGISTER_AND_DEPOSIT_ETH:
strlcpy(msg->title, "Token Account", msg->titleLength);
starkware_print_vault_id(U4BE(context->vaultId, 0), msg->msg);
starkware_print_vault_id(U4BE(context->vaultId, 0),
msg->msg,
msg->msgLength);
break;
default:
@@ -858,7 +882,10 @@ void starkware_plugin_call(int message, void *parameters) {
case STARKWARE_DEPOSIT_NFT:
case STARKWARE_DEPOSIT_NFT_RECLAIM:
strlcpy(msg->title, "TokenID", msg->titleLength);
starkware_print_stark_key(dataContext.tokenContext.quantum, msg->msg);
starkware_print_stark_key(dataContext.tokenContext.quantum,
sizeof(dataContext.tokenContext.quantum),
msg->msg,
msg->msgLength);
break;
case STARKWARE_REGISTER_AND_DEPOSIT_TOKEN: