Skip to content

Commit 9a8db48

Browse files
authored
Merge pull request #108 from Zondax/dev
Fix issues (#107)
2 parents 4eb39ab + c51e210 commit 9a8db48

File tree

158 files changed

+155
-74
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+155
-74
lines changed

app/Makefile.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ APPVERSION_M=2
33
# This is the `spec_version` field of `Runtime`
44
APPVERSION_N=0
55
# This is the patch version of this release
6-
APPVERSION_P=2
6+
APPVERSION_P=3

app/src/parser_impl.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,19 +109,19 @@ parser_error_t getNumItems(const parser_context_t *ctx, uint8_t *numItems) {
109109

110110
case BecomeValidator: {
111111
*numItems = (app_mode_expert() ? BECOME_VALIDATOR_EXPERT_PARAMS : BECOME_VALIDATOR_NORMAL_PARAMS);
112-
if(ctx->tx_obj->becomeValidator.name.ptr) {
112+
if(ctx->tx_obj->becomeValidator.has_name) {
113113
(*numItems)++;
114114
}
115-
if(ctx->tx_obj->becomeValidator.description.ptr) {
115+
if(ctx->tx_obj->becomeValidator.has_description) {
116116
(*numItems)++;
117117
}
118-
if(ctx->tx_obj->becomeValidator.discord_handle.ptr) {
118+
if(ctx->tx_obj->becomeValidator.has_discord_handle) {
119119
(*numItems)++;
120120
}
121-
if(ctx->tx_obj->becomeValidator.website.ptr) {
121+
if(ctx->tx_obj->becomeValidator.has_website) {
122122
(*numItems)++;
123123
}
124-
if(ctx->tx_obj->becomeValidator.avatar.ptr) {
124+
if(ctx->tx_obj->becomeValidator.has_avatar) {
125125
(*numItems)++;
126126
}
127127
break;
@@ -176,22 +176,22 @@ parser_error_t getNumItems(const parser_context_t *ctx, uint8_t *numItems) {
176176
case ChangeValidatorMetadata: {
177177
*numItems = app_mode_expert() ? CHANGE_VALIDATOR_METADATA_EXPERT_PARAMS : CHANGE_VALIDATOR_METADATA_NORMAL_PARAMS;
178178

179-
if (ctx->tx_obj->metadataChange.name.ptr != NULL) {
179+
if (ctx->tx_obj->metadataChange.has_name) {
180180
(*numItems)++;
181181
}
182-
if (ctx->tx_obj->metadataChange.email.ptr != NULL) {
182+
if (ctx->tx_obj->metadataChange.has_email) {
183183
(*numItems)++;
184184
}
185-
if (ctx->tx_obj->metadataChange.description.ptr != NULL) {
185+
if (ctx->tx_obj->metadataChange.has_description) {
186186
(*numItems)++;
187187
}
188-
if (ctx->tx_obj->metadataChange.website.ptr != NULL) {
188+
if (ctx->tx_obj->metadataChange.has_website) {
189189
(*numItems)++;
190190
}
191-
if (ctx->tx_obj->metadataChange.discord_handle.ptr != NULL) {
191+
if (ctx->tx_obj->metadataChange.has_discord_handle) {
192192
(*numItems)++;
193193
}
194-
if (ctx->tx_obj->metadataChange.avatar.ptr != NULL) {
194+
if (ctx->tx_obj->metadataChange.has_avatar) {
195195
(*numItems)++;
196196
}
197197
if (ctx->tx_obj->metadataChange.has_commission_rate) {

app/src/parser_impl_txn.c

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -630,12 +630,11 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
630630
// The validator email
631631
metadataChange->email.ptr = NULL;
632632
metadataChange->email.len = 0;
633-
uint8_t has_email = 0;
634-
CHECK_ERROR(readByte(&ctx, &has_email))
635-
if (has_email != 0 && has_email != 1) {
633+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_email))
634+
if (metadataChange->has_email != 0 && metadataChange->has_email != 1) {
636635
return parser_value_out_of_range;
637636
}
638-
if (has_email) {
637+
if (metadataChange->has_email) {
639638
CHECK_ERROR(readUint32(&ctx, &tmpValue));
640639
if (tmpValue > UINT16_MAX) {
641640
return parser_value_out_of_range;
@@ -647,12 +646,11 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
647646
/// The validator description
648647
metadataChange->description.ptr = NULL;
649648
metadataChange->description.len = 0;
650-
uint8_t has_description = 0;
651-
CHECK_ERROR(readByte(&ctx, &has_description))
652-
if (has_description != 0 && has_description != 1) {
649+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_description))
650+
if (metadataChange->has_description != 0 && metadataChange->has_description != 1) {
653651
return parser_value_out_of_range;
654652
}
655-
if (has_description) {
653+
if (metadataChange->has_description) {
656654
CHECK_ERROR(readUint32(&ctx, &tmpValue));
657655
if (tmpValue > UINT16_MAX) {
658656
return parser_value_out_of_range;
@@ -664,9 +662,8 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
664662
/// The validator website
665663
metadataChange->website.ptr = NULL;
666664
metadataChange->website.len = 0;
667-
uint8_t has_website;
668-
CHECK_ERROR(readByte(&ctx, &has_website))
669-
if (has_website) {
665+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_website))
666+
if (metadataChange->has_website) {
670667
CHECK_ERROR(readUint32(&ctx, &tmpValue));
671668
if (tmpValue > UINT16_MAX) {
672669
return parser_value_out_of_range;
@@ -678,9 +675,8 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
678675
/// The validator's discord handle
679676
metadataChange->discord_handle.ptr = NULL;
680677
metadataChange->discord_handle.len = 0;
681-
uint8_t has_discord_handle;
682-
CHECK_ERROR(readByte(&ctx, &has_discord_handle))
683-
if (has_discord_handle) {
678+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_discord_handle))
679+
if (metadataChange->has_discord_handle) {
684680
CHECK_ERROR(readUint32(&ctx, &tmpValue));
685681
if (tmpValue > UINT16_MAX) {
686682
return parser_value_out_of_range;
@@ -692,9 +688,8 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
692688
/// The validator's avatar
693689
metadataChange->avatar.ptr = NULL;
694690
metadataChange->avatar.len = 0;
695-
uint8_t has_avatar;
696-
CHECK_ERROR(readByte(&ctx, &has_avatar))
697-
if (has_avatar) {
691+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_avatar))
692+
if (metadataChange->has_avatar) {
698693
CHECK_ERROR(readUint32(&ctx, &tmpValue));
699694
if (tmpValue > UINT16_MAX) {
700695
return parser_value_out_of_range;
@@ -706,9 +701,8 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
706701
/// The validator's name
707702
metadataChange->name.ptr = NULL;
708703
metadataChange->name.len = 0;
709-
uint8_t has_name;
710-
CHECK_ERROR(readByte(&ctx, &has_name))
711-
if (has_name) {
704+
CHECK_ERROR(readByte(&ctx, &metadataChange->has_name))
705+
if (metadataChange->has_name) {
712706
CHECK_ERROR(readUint32(&ctx, &tmpValue));
713707
if (tmpValue > UINT16_MAX) {
714708
return parser_value_out_of_range;
@@ -1433,11 +1427,11 @@ parser_error_t verifyShieldedHash(parser_context_t *ctx) {
14331427
}
14341428
}
14351429

1436-
if (ctx->tx_obj->transfer.has_shielded_hash && memcmp(ctx->tx_obj->transfer.shielded_hash.ptr, tx_id_hash, HASH_LEN) != 0) {
1430+
if (ctx->tx_obj->typeTx == Transfer && ctx->tx_obj->transfer.has_shielded_hash && memcmp(ctx->tx_obj->transfer.shielded_hash.ptr, tx_id_hash, HASH_LEN) != 0) {
14371431
return parser_invalid_target_hash;
14381432
}
14391433

1440-
if(ctx->tx_obj->ibc.transfer.has_shielded_hash && memcmp(ctx->tx_obj->ibc.transfer.shielded_hash.ptr, tx_id_hash, HASH_LEN) != 0) {
1434+
if(ctx->tx_obj->typeTx == IBC && ctx->tx_obj->ibc.transfer.has_shielded_hash && memcmp(ctx->tx_obj->ibc.transfer.shielded_hash.ptr, tx_id_hash, HASH_LEN) != 0) {
14411435
return parser_invalid_target_hash;
14421436
}
14431437
#endif

app/src/parser_print_txn.c

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -916,19 +916,19 @@ static parser_error_t printBecomeValidatorTxn( const parser_context_t *ctx,
916916
char *outVal, uint16_t outValLen,
917917
uint8_t pageIdx, uint8_t *pageCount) {
918918

919-
if(displayIdx >= 9 && ctx->tx_obj->becomeValidator.name.ptr == NULL) {
919+
if(displayIdx >= 9 && !ctx->tx_obj->becomeValidator.has_name) {
920920
displayIdx++;
921921
}
922-
if(displayIdx >= 10 && ctx->tx_obj->becomeValidator.description.ptr == NULL) {
922+
if(displayIdx >= 10 && !ctx->tx_obj->becomeValidator.has_description) {
923923
displayIdx++;
924924
}
925-
if(displayIdx >= 11 && ctx->tx_obj->becomeValidator.website.ptr == NULL) {
925+
if(displayIdx >= 11 && !ctx->tx_obj->becomeValidator.has_website) {
926926
displayIdx++;
927927
}
928-
if(displayIdx >= 12 && ctx->tx_obj->becomeValidator.discord_handle.ptr == NULL) {
928+
if(displayIdx >= 12 && !ctx->tx_obj->becomeValidator.has_discord_handle) {
929929
displayIdx++;
930930
}
931-
if(displayIdx >= 13 && ctx->tx_obj->becomeValidator.avatar.ptr == NULL) {
931+
if(displayIdx >= 13 && !ctx->tx_obj->becomeValidator.has_avatar) {
932932
displayIdx++;
933933
}
934934

@@ -995,12 +995,14 @@ static parser_error_t printBecomeValidatorTxn( const parser_context_t *ctx,
995995
}
996996
case 9: {
997997
snprintf(outKey, outKeyLen, "Name");
998-
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.name.ptr, ctx->tx_obj->becomeValidator.name.len, pageIdx, pageCount);
998+
snprintf(outVal, outValLen, "");
999+
if (ctx->tx_obj->becomeValidator.name.len > 0) {
1000+
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.name.ptr, ctx->tx_obj->becomeValidator.name.len, pageIdx, pageCount);
1001+
}
9991002
break;
10001003
}
10011004
case 10: {
10021005
snprintf(outKey, outKeyLen, "Description");
1003-
// snprintf(outVal, outValLen, "(none)");
10041006
snprintf(outVal, outValLen, "");
10051007
if (ctx->tx_obj->becomeValidator.description.len > 0) {
10061008
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.description.ptr, ctx->tx_obj->becomeValidator.description.len, pageIdx, pageCount);
@@ -1009,17 +1011,26 @@ static parser_error_t printBecomeValidatorTxn( const parser_context_t *ctx,
10091011
}
10101012
case 11: {
10111013
snprintf(outKey, outKeyLen, "Website");
1012-
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.website.ptr, ctx->tx_obj->becomeValidator.website.len, pageIdx, pageCount);
1014+
snprintf(outVal, outValLen, "");
1015+
if (ctx->tx_obj->becomeValidator.website.len > 0) {
1016+
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.website.ptr, ctx->tx_obj->becomeValidator.website.len, pageIdx, pageCount);
1017+
}
10131018
break;
10141019
}
10151020
case 12: {
10161021
snprintf(outKey, outKeyLen, "Discord handle");
1017-
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.discord_handle.ptr, ctx->tx_obj->becomeValidator.discord_handle.len, pageIdx, pageCount);
1022+
snprintf(outVal, outValLen, "");
1023+
if (ctx->tx_obj->becomeValidator.discord_handle.len > 0) {
1024+
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.discord_handle.ptr, ctx->tx_obj->becomeValidator.discord_handle.len, pageIdx, pageCount);
1025+
}
10181026
break;
10191027
}
10201028
case 13: {
10211029
snprintf(outKey, outKeyLen, "Avatar");
1022-
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.avatar.ptr, ctx->tx_obj->becomeValidator.avatar.len, pageIdx, pageCount);
1030+
snprintf(outVal, outValLen, "");
1031+
if (ctx->tx_obj->becomeValidator.avatar.len > 0) {
1032+
pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.avatar.ptr, ctx->tx_obj->becomeValidator.avatar.len, pageIdx, pageCount);
1033+
}
10231034
break;
10241035
}
10251036
case 14:
@@ -1820,22 +1831,22 @@ static parser_error_t printChangeValidatorMetadata( const parser_context_t *ctx
18201831

18211832
const tx_metadata_change_t *metadataChange = &ctx->tx_obj->metadataChange;
18221833

1823-
if(displayIdx >= 2 && metadataChange->name.ptr == NULL) {
1834+
if(displayIdx >= 2 && !metadataChange->has_name) {
18241835
displayIdx++;
18251836
}
1826-
if(displayIdx >= 3 && metadataChange->email.ptr == NULL) {
1837+
if(displayIdx >= 3 && !metadataChange->has_email) {
18271838
displayIdx++;
18281839
}
1829-
if(displayIdx >= 4 && metadataChange->description.ptr == NULL) {
1840+
if(displayIdx >= 4 && !metadataChange->has_description) {
18301841
displayIdx++;
18311842
}
1832-
if(displayIdx >= 5 && metadataChange->website.ptr == NULL) {
1843+
if(displayIdx >= 5 && !metadataChange->has_website) {
18331844
displayIdx++;
18341845
}
1835-
if(displayIdx >= 6 && metadataChange->discord_handle.ptr == NULL) {
1846+
if(displayIdx >= 6 && !metadataChange->has_discord_handle) {
18361847
displayIdx++;
18371848
}
1838-
if(displayIdx >= 7 && metadataChange->avatar.ptr == NULL) {
1849+
if(displayIdx >= 7 && !metadataChange->has_avatar) {
18391850
displayIdx++;
18401851
}
18411852
if(displayIdx >= 8 && !metadataChange->has_commission_rate) {
@@ -1863,32 +1874,51 @@ static parser_error_t printChangeValidatorMetadata( const parser_context_t *ctx
18631874
}
18641875
case 2: {
18651876
snprintf(outKey, outKeyLen, "Name");
1866-
pageStringExt(outVal, outValLen, (const char*)metadataChange->name.ptr, metadataChange->name.len, pageIdx, pageCount);
1877+
snprintf(outVal, outValLen, "");
1878+
if (metadataChange->name.len > 0) {
1879+
pageStringExt(outVal, outValLen, (const char*)metadataChange->name.ptr, metadataChange->name.len, pageIdx, pageCount);
1880+
}
1881+
18671882
break;
18681883
}
18691884
case 3: {
18701885
snprintf(outKey, outKeyLen, "Email");
1871-
pageStringExt(outVal, outValLen, (const char*)metadataChange->email.ptr, metadataChange->email.len, pageIdx, pageCount);
1886+
snprintf(outVal, outValLen, "");
1887+
if (metadataChange->email.len > 0) {
1888+
pageStringExt(outVal, outValLen, (const char*)metadataChange->email.ptr, metadataChange->email.len, pageIdx, pageCount);
1889+
}
18721890
break;
18731891
}
18741892
case 4: {
18751893
snprintf(outKey, outKeyLen, "Description");
1876-
pageStringExt(outVal, outValLen, (const char*)metadataChange->description.ptr, metadataChange->description.len, pageIdx, pageCount);
1894+
snprintf(outVal, outValLen, "");
1895+
if (metadataChange->description.len > 0) {
1896+
pageStringExt(outVal, outValLen, (const char*)metadataChange->description.ptr, metadataChange->description.len, pageIdx, pageCount);
1897+
}
18771898
break;
18781899
}
18791900
case 5: {
18801901
snprintf(outKey, outKeyLen, "Website");
1881-
pageStringExt(outVal, outValLen, (const char*)metadataChange->website.ptr, metadataChange->website.len, pageIdx, pageCount);
1902+
snprintf(outVal, outValLen, "");
1903+
if (metadataChange->website.len > 0) {
1904+
pageStringExt(outVal, outValLen, (const char*)metadataChange->website.ptr, metadataChange->website.len, pageIdx, pageCount);
1905+
}
18821906
break;
18831907
}
18841908
case 6: {
18851909
snprintf(outKey, outKeyLen, "Discord handle");
1886-
pageStringExt(outVal, outValLen, (const char*)metadataChange->discord_handle.ptr, metadataChange->discord_handle.len, pageIdx, pageCount);
1910+
snprintf(outVal, outValLen, "");
1911+
if (metadataChange->discord_handle.len > 0) {
1912+
pageStringExt(outVal, outValLen, (const char*)metadataChange->discord_handle.ptr, metadataChange->discord_handle.len, pageIdx, pageCount);
1913+
}
18871914
break;
18881915
}
18891916
case 7: {
18901917
snprintf(outKey, outKeyLen, "Avatar");
1891-
pageStringExt(outVal, outValLen, (const char*)metadataChange->avatar.ptr, metadataChange->avatar.len, pageIdx, pageCount);
1918+
snprintf(outVal, outValLen, "");
1919+
if (metadataChange->avatar.len > 0) {
1920+
pageStringExt(outVal, outValLen, (const char*)metadataChange->avatar.ptr, metadataChange->avatar.len, pageIdx, pageCount);
1921+
}
18921922
break;
18931923
}
18941924
case 8: {

app/src/parser_types.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,15 @@ typedef struct {
300300
bytes_t max_commission_rate_change;
301301
bytes_t email;
302302
bytes_t description;
303+
uint8_t has_description;
303304
bytes_t website;
305+
uint8_t has_website;
304306
bytes_t discord_handle;
307+
uint8_t has_discord_handle;
305308
bytes_t avatar;
309+
uint8_t has_avatar;
306310
bytes_t name;
311+
uint8_t has_name;
307312
} tx_become_validator_t;
308313

309314
typedef struct {
@@ -382,12 +387,18 @@ typedef struct {
382387
typedef struct {
383388
AddressAlt validator;
384389
bytes_t email;
390+
uint8_t has_email;
385391
bytes_t description;
392+
uint8_t has_description;
386393
bytes_t website;
394+
uint8_t has_website;
387395
bytes_t discord_handle;
396+
uint8_t has_discord_handle;
388397
bytes_t avatar;
398+
uint8_t has_avatar;
389399
uint8_t has_commission_rate;
390400
bytes_t name;
401+
uint8_t has_name;
391402
bytes_t commission_rate;
392403
} tx_metadata_change_t;
393404

0 commit comments

Comments
 (0)