@@ -35,14 +35,16 @@ void __assert_fail(const char * assertion, const char * file, unsigned int line,
35
35
#define FLOW_WEIGHT_SIZE 2 // 16 bits for weight (uint16)
36
36
#define RLP_PREFIX 1
37
37
38
- #define FLOW_ACCOUNT_KEY_SIZE (2 * ( \
38
+ #define ARGUMENT_BUFFER_SIZE_ACCOUNT_KEY (2 * ( \
39
39
(RLP_PREFIX * 2) + \
40
40
((RLP_PREFIX * 2) + FLOW_PUBLIC_KEY_SIZE) + \
41
41
(RLP_PREFIX + FLOW_SIG_ALGO_SIZE) + \
42
42
(RLP_PREFIX + FLOW_HASH_ALGO_SIZE) + \
43
43
(RLP_PREFIX + FLOW_WEIGHT_SIZE) \
44
44
) + 2)
45
45
46
+ #define ARGUMENT_BUFFER_SIZE_STRING 256
47
+
46
48
parser_error_t parser_parse (parser_context_t * ctx , const uint8_t * data , size_t dataLen ) {
47
49
CHECK_PARSER_ERR (parser_init (ctx , data , dataLen ))
48
50
return _read (ctx , & parser_tx_obj );
@@ -170,7 +172,7 @@ parser_error_t parser_printChainID(const flow_payer_t *v,
170
172
return parser_invalid_address ;
171
173
}
172
174
173
- __Z_INLINE parser_error_t parser_printArgument (const flow_argument_list_t * v ,
175
+ parser_error_t parser_printArgument (const flow_argument_list_t * v ,
174
176
uint8_t argIndex , char * expectedType , jsmntype_t jsonType ,
175
177
char * outVal , uint16_t outValLen ,
176
178
uint8_t pageIdx , uint8_t * pageCount ) {
@@ -191,6 +193,26 @@ __Z_INLINE parser_error_t parser_printArgument(const flow_argument_list_t *v,
191
193
return parser_ok ;
192
194
}
193
195
196
+ parser_error_t parser_printArgumentString (const parser_context_t * argumentCtx ,
197
+ char * outVal , uint16_t outValLen ,
198
+ uint8_t pageIdx , uint8_t * pageCount ) {
199
+ MEMZERO (outVal , outValLen );
200
+
201
+ parsed_json_t parsedJson = {false};
202
+ CHECK_PARSER_ERR (json_parse (& parsedJson , (char * ) argumentCtx -> buffer , argumentCtx -> bufferLen ));
203
+
204
+ char bufferUI [ARGUMENT_BUFFER_SIZE_STRING ];
205
+ CHECK_PARSER_ERR (json_extractString (bufferUI , sizeof (bufferUI ), & parsedJson , 0 ))
206
+ pageString (outVal , outValLen , bufferUI , pageIdx , pageCount );
207
+
208
+ // Check requested page is in range
209
+ if (pageIdx > * pageCount ) {
210
+ return parser_display_page_out_of_range ;
211
+ }
212
+
213
+ return parser_ok ;
214
+ }
215
+
194
216
parser_error_t parser_printArgumentPublicKey (const parser_context_t * argumentCtx ,
195
217
char * outVal , uint16_t outValLen ,
196
218
uint8_t pageIdx , uint8_t * pageCount ) {
@@ -199,8 +221,8 @@ parser_error_t parser_printArgumentPublicKey(const parser_context_t *argumentCtx
199
221
parsed_json_t parsedJson = {false};
200
222
CHECK_PARSER_ERR (json_parse (& parsedJson , (char * ) argumentCtx -> buffer , argumentCtx -> bufferLen ));
201
223
202
- char bufferUI [FLOW_ACCOUNT_KEY_SIZE ];
203
- CHECK_PARSER_ERR (json_extractPubKey (bufferUI , sizeof (bufferUI ), & parsedJson , 0 ))
224
+ char bufferUI [ARGUMENT_BUFFER_SIZE_ACCOUNT_KEY ];
225
+ CHECK_PARSER_ERR (json_extractString (bufferUI , sizeof (bufferUI ), & parsedJson , 0 ))
204
226
pageString (outVal , outValLen , bufferUI , pageIdx , pageCount );
205
227
206
228
// Check requested page is in range
@@ -231,9 +253,9 @@ parser_error_t parser_printArgumentPublicKeys(const parser_context_t *argumentCt
231
253
zemu_log_stack ("PublicKeys" );
232
254
233
255
uint16_t arrayElementToken ;
234
- char bufferUI [FLOW_ACCOUNT_KEY_SIZE ];
256
+ char bufferUI [ARGUMENT_BUFFER_SIZE_ACCOUNT_KEY ];
235
257
CHECK_PARSER_ERR (array_get_nth_element (& parsedJson , internalTokenElementIdx , argumentIndex , & arrayElementToken ))
236
- CHECK_PARSER_ERR (json_extractPubKey (bufferUI , sizeof (bufferUI ), & parsedJson , arrayElementToken ))
258
+ CHECK_PARSER_ERR (json_extractString (bufferUI , sizeof (bufferUI ), & parsedJson , arrayElementToken ))
237
259
pageString (outVal , outValLen , bufferUI , pageIdx , pageCount );
238
260
239
261
// Check requested page is in range
@@ -663,30 +685,34 @@ parser_error_t parser_getItemRegisterNode(const parser_context_t *ctx,
663
685
return parser_printChainID (& parser_tx_obj .payer ,
664
686
outVal , outValLen , pageIdx , pageCount );
665
687
case 2 :
688
+ CHECK_PARSER_ERR (
689
+ parser_printArgumentString (& parser_tx_obj .arguments .argCtx [0 ],
690
+ outVal , outValLen , pageIdx , pageCount ));
666
691
snprintf (outKey , outKeyLen , "Node ID" );
667
- return parser_printArgument (& parser_tx_obj .arguments , 0 ,
668
- "String" , JSMN_STRING ,
669
- outVal , outValLen , pageIdx , pageCount );
692
+ return parser_ok ;
670
693
case 3 :
671
694
snprintf (outKey , outKeyLen , "Node Role" );
672
695
return parser_printArgument (& parser_tx_obj .arguments , 1 ,
673
696
"UInt8" , JSMN_STRING ,
674
697
outVal , outValLen , pageIdx , pageCount );
675
698
case 4 :
699
+ CHECK_PARSER_ERR (
700
+ parser_printArgumentString (& parser_tx_obj .arguments .argCtx [2 ],
701
+ outVal , outValLen , pageIdx , pageCount ));
676
702
snprintf (outKey , outKeyLen , "Networking Address" );
677
- return parser_printArgument (& parser_tx_obj .arguments , 2 ,
678
- "String" , JSMN_STRING ,
679
- outVal , outValLen , pageIdx , pageCount );
703
+ return parser_ok ;
680
704
case 5 :
705
+ CHECK_PARSER_ERR (
706
+ parser_printArgumentString (& parser_tx_obj .arguments .argCtx [3 ],
707
+ outVal , outValLen , pageIdx , pageCount ));
681
708
snprintf (outKey , outKeyLen , "Networking Key" );
682
- return parser_printArgument (& parser_tx_obj .arguments , 3 ,
683
- "String" , JSMN_STRING ,
684
- outVal , outValLen , pageIdx , pageCount );
709
+ return parser_ok ;
685
710
case 6 :
711
+ CHECK_PARSER_ERR (
712
+ parser_printArgumentString (& parser_tx_obj .arguments .argCtx [4 ],
713
+ outVal , outValLen , pageIdx , pageCount ));
686
714
snprintf (outKey , outKeyLen , "Staking Key" );
687
- return parser_printArgument (& parser_tx_obj .arguments , 4 ,
688
- "String" , JSMN_STRING ,
689
- outVal , outValLen , pageIdx , pageCount );
715
+ return parser_ok ;
690
716
case 7 :
691
717
snprintf (outKey , outKeyLen , "Amount" );
692
718
return parser_printArgument (& parser_tx_obj .arguments , 5 ,
@@ -1113,9 +1139,8 @@ parser_error_t parser_getItemRegisterOperatorNode(const parser_context_t *ctx,
1113
1139
outVal , outValLen , pageIdx , pageCount );
1114
1140
case 3 :
1115
1141
snprintf (outKey , outKeyLen , "Node ID" );
1116
- return parser_printArgument (& parser_tx_obj .arguments , 1 ,
1117
- "String" , JSMN_STRING ,
1118
- outVal , outValLen , pageIdx , pageCount );
1142
+ return parser_printArgumentString (& parser_tx_obj .arguments .argCtx [1 ],
1143
+ outVal , outValLen , pageIdx , pageCount );
1119
1144
case 4 :
1120
1145
snprintf (outKey , outKeyLen , "Amount" );
1121
1146
return parser_printArgument (& parser_tx_obj .arguments , 2 ,
@@ -1171,9 +1196,8 @@ parser_error_t parser_getItemRegisterDelegator(const parser_context_t *ctx,
1171
1196
outVal , outValLen , pageIdx , pageCount );
1172
1197
case 2 :
1173
1198
snprintf (outKey , outKeyLen , "Node ID" );
1174
- return parser_printArgument (& parser_tx_obj .arguments , 0 ,
1175
- "String" , JSMN_STRING ,
1176
- outVal , outValLen , pageIdx , pageCount );
1199
+ return parser_printArgumentString (& parser_tx_obj .arguments .argCtx [0 ],
1200
+ outVal , outValLen , pageIdx , pageCount );
1177
1201
case 3 :
1178
1202
snprintf (outKey , outKeyLen , "Amount" );
1179
1203
return parser_printArgument (& parser_tx_obj .arguments , 1 ,
0 commit comments