diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c index cb84cba7ab0887ef6f28847e2e6d44d04e95df0d..5e229297e4c2650b97b13eb99e3225e34bca8a00 100644 --- a/modules/chain/dap_chain_cell.c +++ b/modules/chain/dap_chain_cell.c @@ -133,9 +133,20 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path) sizeof(l_element_size) ){ if ( l_element_size > 0 ){ dap_chain_atom_ptr_t * l_element = DAP_NEW_Z_SIZE (dap_chain_atom_ptr_t, l_element_size ); - if ( fread( l_element,1,l_element_size,l_cell->file_storage ) == l_element_size ) { - a_chain->callback_atom_add (a_chain, l_element, l_element_size); + if ( l_element){ + size_t l_read_bytes = fread( l_element,1,l_element_size,l_cell->file_storage ); + if ( l_read_bytes == l_element_size ) { + a_chain->callback_atom_add (a_chain, l_element, l_element_size); + }else{ + log_it (L_ERROR, "Can't read %zd bytes (processed only %zd), stop cell load process", l_element_size, + l_read_bytes); + break; + } + }else{ + log_it (L_ERROR, "Can't allocate %zd bytes, stop cell load process", l_element_size); + break; } + } else { log_it (L_ERROR, "Zero element size, file is corrupted"); break;