@@ -36,7 +36,7 @@ parser_error_t rlp_decode(
36
36
uint8_t p = * outputPayload -> buffer ;
37
37
38
38
if (p >= 0 && p <= 0x7F ) {
39
- * outputKind = kind_byte ;
39
+ * outputKind = kind_string ;
40
40
outputPayload -> bufferLen = 1 ;
41
41
outputPayload -> buffer += 0 ;
42
42
* bytesConsumed = 1 ; // 1 byte to consume from the stream
@@ -99,7 +99,7 @@ parser_error_t rlp_decode(
99
99
}
100
100
101
101
parser_error_t rlp_readByte (const parser_context_t * ctx , rlp_kind_e kind , uint8_t * value ) {
102
- if (kind != kind_byte ) {
102
+ if (kind != kind_string ) {
103
103
return parser_rlp_error_invalid_kind ;
104
104
}
105
105
@@ -118,28 +118,29 @@ parser_error_t rlp_readByte(const parser_context_t *ctx, rlp_kind_e kind, uint8_
118
118
parser_error_t rlp_readUInt64 (const parser_context_t * ctx ,
119
119
rlp_kind_e kind ,
120
120
uint64_t * value ) {
121
- if (kind == kind_string ) {
122
- * value = 0 ;
123
-
124
- if (ctx -> bufferLen != 8 ) {
125
- return parser_rlp_error_invalid_value_len ;
126
- }
127
-
128
- for (uint8_t i = 0 ; i < 8 ; i ++ ) {
129
- * value <<= 8u ;
130
- * value += * (ctx -> buffer + ctx -> offset + i );
131
- }
132
-
133
- * value <<= 8u ;
134
- return parser_ok ;
121
+ if (kind != kind_string ) {
122
+ return parser_rlp_error_invalid_kind ;
135
123
}
136
124
137
- if (kind == kind_byte ) {
125
+ // handle case when string is a single byte
126
+ if (ctx -> bufferLen == 1 ) {
138
127
uint8_t tmp ;
139
128
CHECK_PARSER_ERR (rlp_readByte (ctx , kind , & tmp ))
140
129
* value = tmp ;
141
130
return parser_ok ;
142
131
}
143
132
144
- return parser_rlp_error_invalid_kind ;
133
+ // max size of uint64_t is 8 bytes
134
+ if (ctx -> bufferLen > 8 ) {
135
+ return parser_rlp_error_invalid_value_len ;
136
+ }
137
+
138
+ * value = 0 ;
139
+
140
+ for (uint8_t i = 0 ; i < ctx -> bufferLen ; i ++ ) {
141
+ * value <<= 8u ;
142
+ * value += * (ctx -> buffer + ctx -> offset + i );
143
+ }
144
+
145
+ return parser_ok ;
145
146
}
0 commit comments