From bf09e1e1446587ab7af0b409df388e98775e822c Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Mon, 28 Sep 2020 13:57:13 +0700
Subject: [PATCH] [+] Add element size and allocation checks on load process

---
 modules/chain/dap_chain_cell.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c
index cb84cba7ab..5e229297e4 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;
-- 
GitLab