2323parser_error_t read_u8 (parser_context_t * ctx , uint8_t * val ) {
2424 CHECK_INPUT (ctx );
2525 CHECK_INPUT (val );
26+ if (ctx -> offset + OFFSET_U8 > ctx -> buffer .len ) {
27+ return parser_unexpected_buffer_end ;
28+ }
2629 * val = * (uint8_t * )(ctx -> buffer .ptr + ctx -> offset );
2730 CTX_CHECK_AND_ADVANCE (ctx , OFFSET_U8 );
2831 return parser_ok ;
@@ -31,124 +34,162 @@ parser_error_t read_u8(parser_context_t *ctx, uint8_t *val) {
3134parser_error_t read_u16 (parser_context_t * ctx , uint16_t * val ) {
3235 CHECK_INPUT (ctx );
3336 CHECK_INPUT (val );
34- * val = * (uint16_t * )(ctx -> buffer .ptr + ctx -> offset );
37+ if (ctx -> offset + OFFSET_U16 > ctx -> buffer .len ) {
38+ return parser_unexpected_buffer_end ;
39+ }
40+ MEMCPY (val , ctx -> buffer .ptr + ctx -> offset , sizeof (uint16_t ));
3541 CTX_CHECK_AND_ADVANCE (ctx , OFFSET_U16 );
3642 return parser_ok ;
3743}
3844
3945parser_error_t read_u32 (parser_context_t * ctx , uint32_t * val ) {
4046 CHECK_INPUT (ctx );
4147 CHECK_INPUT (val );
42- * val = * (uint32_t * )(ctx -> buffer .ptr + ctx -> offset );
48+ if (ctx -> offset + OFFSET_U32 > ctx -> buffer .len ) {
49+ return parser_unexpected_buffer_end ;
50+ }
51+ MEMCPY (val , ctx -> buffer .ptr + ctx -> offset , sizeof (uint32_t ));
4352 CTX_CHECK_AND_ADVANCE (ctx , OFFSET_U32 );
4453 return parser_ok ;
4554}
4655
4756parser_error_t read_u64 (parser_context_t * ctx , uint64_t * val ) {
4857 CHECK_INPUT (ctx );
4958 CHECK_INPUT (val );
50- * val = * (uint64_t * )(ctx -> buffer .ptr + ctx -> offset );
59+ if (ctx -> offset + OFFSET_U64 > ctx -> buffer .len ) {
60+ return parser_unexpected_buffer_end ;
61+ }
62+ MEMCPY (val , ctx -> buffer .ptr + ctx -> offset , sizeof (uint64_t ));
5163 CTX_CHECK_AND_ADVANCE (ctx , OFFSET_U64 );
5264 return parser_ok ;
5365}
5466
55- // void print_buffer(bytes_t *buffer, const char *title) {
56- // #if defined(LEDGER_SPECIFIC)
57- // ZEMU_LOGF(50, "%s\n", title);
58- // char print[1000] = {0};
59- // array_to_hexstr(print, sizeof(print), buffer->ptr, buffer->len);
60- // ZEMU_LOGF(1000, "%s\n", print);
61- // #else
62- // printf("%s %d: ", title, buffer->len);
63- // for (uint16_t i = 0; i < buffer->len; i++) {
64- // printf("%02x", buffer->ptr[i]);
65- // }
66- // printf("\n");
67- // #endif
68- // }
67+ void print_buffer (bytes_t * buffer , const char * title ) {
68+ #if defined(LEDGER_SPECIFIC )
69+ char print [1000 ] = {0 };
70+ MEMCPY (print , title , strlen (title ));
71+ ZEMU_LOGF (50 , "%s\n" , print );
72+ MEMZERO (print , sizeof (print ));
73+ array_to_hexstr (print , sizeof (print ), buffer -> ptr , buffer -> len );
74+ ZEMU_LOGF (1000 , "%s\n" , print );
75+ #else
76+ printf ("%s %d: " , title , buffer -> len );
77+ for (uint16_t i = 0 ; i < buffer -> len ; i ++ ) {
78+ printf ("%02x" , buffer -> ptr [i ]);
79+ }
80+ printf ("\n" );
81+ #endif
82+ }
6983
70- // void print_buffer_u8(bytes_t *buffer, const char *title) {
71- // #if defined(LEDGER_SPECIFIC)
72- // ZEMU_LOGF(50, "%s\n", title);
73- // char print[1000] = {0};
74- // array_to_hexstr(print, sizeof(print), buffer->ptr, buffer->len);
75- // ZEMU_LOGF(1000, "%s\n", print);
76- // #else
77- // printf("%s %d: [", title, buffer->len);
78- // for (uint16_t i = 0; i < buffer->len; i++) {
79- // printf("%d, ", buffer->ptr[i]);
80- // }
81- // printf("]\n");
82- // #endif
83- // }
84+ void print_buffer_u8 (bytes_t * buffer , const char * title ) {
85+ #if defined(LEDGER_SPECIFIC )
86+ char print [1000 ] = {0 };
87+ MEMCPY (print , title , strlen (title ));
88+ ZEMU_LOGF (50 , "%s\n" , print );
89+ MEMZERO (print , sizeof (print ));
90+ array_to_hexstr (print , sizeof (print ), buffer -> ptr , buffer -> len );
91+ ZEMU_LOGF (1000 , "%s\n" , print );
92+ #else
93+ printf ("%s %d: [" , title , buffer -> len );
94+ for (uint16_t i = 0 ; i < buffer -> len ; i ++ ) {
95+ printf ("%d, " , buffer -> ptr [i ]);
96+ }
97+ printf ("]\n" );
98+ #endif
99+ }
84100
85- // void print_buffer_str(bytes_t *buffer, const char *title) {
86- // #if defined(LEDGER_SPECIFIC)
87- // ZEMU_LOGF(50, "%s\n", title);
88- // char print[1000] = {0};
89- // array_to_hexstr(print, sizeof(print), buffer->ptr, buffer->len);
90- // ZEMU_LOGF(1000, "%s\n", print);
91- // #else
92- // uint8_t buff[1000] = {0};
93- // memcpy(buff, buffer->ptr, buffer->len);
94- // printf("%s %s\n", title, buff);
95- // #endif
96- // }
101+ void print_buffer_str (bytes_t * buffer , const char * title ) {
102+ #if defined(LEDGER_SPECIFIC )
103+ char print [1000 ] = {0 };
104+ MEMCPY (print , title , strlen (title ));
105+ ZEMU_LOGF (50 , "%s\n" , print );
106+ MEMZERO (print , sizeof (print ));
107+ array_to_hexstr (print , sizeof (print ), buffer -> ptr , buffer -> len );
108+ ZEMU_LOGF (1000 , "%s\n" , print );
109+ #else
110+ uint8_t buff [1000 ] = {0 };
111+ memcpy (buff , buffer -> ptr , buffer -> len );
112+ printf ("%s %s\n" , title , buff );
113+ #endif
114+ }
97115
98116void print_string (const char * str ) {
99117#if defined(LEDGER_SPECIFIC )
100118 char print [1000 ] = {0 };
101119 MEMCPY (print , str , strlen (str ));
102- ZEMU_LOGF (100 , "%s\n" , str );
120+ ZEMU_LOGF (100 , "%s\n" , print );
103121#else
104- printf ("%s\n" , str );
122+ // printf("%s\n", str);
105123#endif
106124}
107125
108- // void print_string_title(const char *str, const char *title) {
109- // #if defined(LEDGER_SPECIFIC)
110- // ZEMU_LOGF(100, "%s: %s\n", title, str);
111- // #else
112- // printf("%s: %s\n", title, str);
113- // #endif
114- // }
126+ void print_string_title (const char * str , const char * title ) {
127+ #if defined(LEDGER_SPECIFIC )
128+ char print [1000 ] = {0 };
129+ MEMCPY (print , title , strlen (title ));
130+ MEMCPY (print + strlen (title ), str , strlen (str ));
131+ ZEMU_LOGF (100 , "%s\n" , print );
132+ #else
133+ printf ("%s: %s\n" , title , str );
134+ #endif
135+ }
115136
116- // void print_u8(const char *str, uint8_t val) {
117- // #if defined(LEDGER_SPECIFIC)
118- // ZEMU_LOGF(100, "%s: %d\n", str, val);
119- // #else
120- // printf("%s: %d\n", str, val);
121- // #endif
122- // }
137+ void print_u8 (const char * str , uint8_t val ) {
138+ #if defined(LEDGER_SPECIFIC )
139+ char print [1000 ] = {0 };
140+ MEMCPY (print , str , strlen (str ));
141+ MEMCPY (print + strlen (str ), ": " , 2 );
142+ MEMCPY (print + strlen (str ) + 2 , & val , sizeof (val ));
143+ ZEMU_LOGF (100 , "%s\n" , print );
144+ #else
145+ printf ("%s: %d\n" , str , val );
146+ #endif
147+ }
123148
124- // void print_u16(const char *str, uint16_t val) {
125- // #if defined(LEDGER_SPECIFIC)
126- // ZEMU_LOGF(100, "%s: %d\n", str, val);
127- // #else
128- // printf("%s: %d\n", str, val);
129- // #endif
130- // }
149+ void print_u16 (const char * str , uint16_t val ) {
150+ #if defined(LEDGER_SPECIFIC )
151+ char print [1000 ] = {0 };
152+ MEMCPY (print , str , strlen (str ));
153+ MEMCPY (print + strlen (str ), ": " , 2 );
154+ MEMCPY (print + strlen (str ) + 2 , & val , sizeof (val ));
155+ ZEMU_LOGF (100 , "%s\n" , print );
156+ #else
157+ printf ("%s: %d\n" , str , val );
158+ #endif
159+ }
131160
132- // void print_u32(const char *str, uint32_t val) {
133- // #if defined(LEDGER_SPECIFIC)
134- // ZEMU_LOGF(100, "%s: %d\n", str, val);
135- // #else
136- // printf("%s: %u\n", str, val);
137- // #endif
138- // }
161+ void print_u32 (const char * str , uint32_t val ) {
162+ #if defined(LEDGER_SPECIFIC )
163+ char print [1000 ] = {0 };
164+ MEMCPY (print , str , strlen (str ));
165+ MEMCPY (print + strlen (str ), ": " , 2 );
166+ MEMCPY (print + strlen (str ) + 2 , & val , sizeof (val ));
167+ ZEMU_LOGF (100 , "%s\n" , print );
168+ #else
169+ printf ("%s: %u\n" , str , val );
170+ #endif
171+ }
139172
140- // void print_u64(const char *str, uint64_t val) {
141- // #if defined(LEDGER_SPECIFIC)
142- // ZEMU_LOGF(100, "%s: %lu\n", str, val);
143- // #else
144- // printf("%s: %llu\n", str, val);
145- // #endif
146- // }
173+ void print_u64 (const char * str , uint64_t val ) {
174+ #if defined(LEDGER_SPECIFIC )
175+ char print [1000 ] = {0 };
176+ MEMCPY (print , str , strlen (str ));
177+ MEMCPY (print + strlen (str ), ": " , 2 );
178+ MEMCPY (print + strlen (str ) + 2 , & val , sizeof (val ));
179+ ZEMU_LOGF (100 , "%s\n" , print );
180+ #else
181+ printf ("%s: %llu\n" , str , val );
182+ #endif
183+ }
147184
148- // void print_u64_hex(const char *str, uint64_t val) {
149- // #if defined(LEDGER_SPECIFIC)
150- // ZEMU_LOGF(100, "%s: %lu\n", str, val);
151- // #else
152- // printf("%s: 0x%llx\n", str, val);
153- // #endif
154- // }
185+ void print_u64_hex (const char * str , uint64_t val ) {
186+ #if defined(LEDGER_SPECIFIC )
187+ char print [1000 ] = {0 };
188+ MEMCPY (print , str , strlen (str ));
189+ MEMCPY (print + strlen (str ), ": " , 2 );
190+ MEMCPY (print + strlen (str ) + 2 , & val , sizeof (val ));
191+ ZEMU_LOGF (100 , "%s\n" , print );
192+ #else
193+ printf ("%s: 0x%llx\n" , str , val );
194+ #endif
195+ }
0 commit comments