@@ -157,6 +157,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
157157 case FelicaStandard :
158158 uint32_t systems_total = 0 ;
159159 if (!flipper_format_read_uint32 (ff , "System found" , & systems_total , 1 )) break ;
160+ if (systems_total == 0 ) break ;
161+
160162 simple_array_init (data -> systems , systems_total );
161163
162164 for (uint8_t sys_idx = 0 ; sys_idx < systems_total ; sys_idx ++ ) {
@@ -181,6 +183,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
181183 do {
182184 uint32_t area_count = 0 ;
183185 if (!flipper_format_read_uint32 (ff , "Area found" , & area_count , 1 )) break ;
186+ if (area_count == 0 ) break ;
187+
184188 simple_array_init (system -> areas , area_count );
185189
186190 furi_string_reset (str_key_buffer );
@@ -207,6 +211,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
207211 do {
208212 uint32_t service_count = 0 ;
209213 if (!flipper_format_read_uint32 (ff , "Service found" , & service_count , 1 )) break ;
214+ if (service_count == 0 ) break ;
215+
210216 simple_array_init (system -> services , service_count );
211217
212218 furi_string_reset (str_key_buffer );
@@ -237,6 +243,8 @@ bool felica_load(FelicaData* data, FlipperFormat* ff, uint32_t version) {
237243 uint32_t public_block_count = 0 ;
238244 if (!flipper_format_read_uint32 (ff , "Public blocks read" , & public_block_count , 1 ))
239245 break ;
246+ if (public_block_count == 0 ) break ;
247+
240248 simple_array_init (system -> public_blocks , public_block_count );
241249 for (uint16_t i = 0 ; i < public_block_count ; i ++ ) {
242250 furi_string_printf (str_key_buffer , "Block %04X" , i );
0 commit comments