enlarge buffers to prevent memory corruption, but code needs strict review

This commit is contained in:
Edward Emelianov 2025-02-12 09:59:33 +03:00
parent c959a4e23a
commit 9048c98099

View File

@ -72,17 +72,16 @@ static WINDOW *msg_win; // Message window
static WINDOW *sep_win; // Separator line above the command (readline) window
static WINDOW *cmd_win; // Command (readline) window
// amount of lines in line_arary
//#define LINEARRSZ (BUFSIZ/100)
#define LINEARRSZ 3
// formatted buffer initial size
#define FBUFSIZ 30
// raw buffer initial size
#define RBUFSIZ 30
// amount of spaces and delimeters in hexview string (address + 2 lines + 3 additional spaces)
#define HEXDSPACES (13)
// maximal columns in line
#define MAXCOLS (512)
// amount of lines in line_arary
#define LINEARRSZ (32)
// formatted buffer initial size
#define FBUFSIZ (MAXCOLS * LINEARRSZ * 4)
// raw buffer initial size
#define RBUFSIZ (FBUFSIZ / 2)
// amount of spaces and delimeters in hexview string (address + 2 lines + 3 additional spaces)
#define HEXDSPACES (13)
typedef struct{
char *formatted_buffer; // formatted buffer, ptrtobuf(i) returns i'th string
@ -302,21 +301,24 @@ static void linebuf_free(){
* @brief chksizes - check sizes of buffers and enlarge them if need
*/
static void chksizes(){
size_t addportion = MAXCOLS*3;
size_t addportion = MAXCOLS * LINEARRSZ;
if(rawbufsz - rawbufcur < addportion){ // raw buffer always should be big enough
rawbufsz += (addportion > RBUFSIZ) ? addportion : RBUFSIZ;
DBG("Enlarge raw buffer to %zd", rawbufsz);
raw_buffer = realloc(raw_buffer, rawbufsz);
DBG("done");
}
if(linebuffer->fbuf_size - linebuffer->fbuf_curr < addportion){ // realloc buffer if need
linebuffer->fbuf_size += (addportion > FBUFSIZ) ? addportion : FBUFSIZ;
DBG("Enlarge formatted buffer to %zd", linebuffer->fbuf_size);
linebuffer->formatted_buffer = realloc(linebuffer->formatted_buffer, linebuffer->fbuf_size);
DBG("done");
}
if(linebuffer->lnarr_size - linebuffer->lnarr_curr < 3){
if(linebuffer->lnarr_size - linebuffer->lnarr_curr < LINEARRSZ){
linebuffer->lnarr_size += LINEARRSZ;
DBG("Enlarge line array buffer to %zd", linebuffer->lnarr_size);
linebuffer->line_array_idx = realloc(linebuffer->line_array_idx, linebuffer->lnarr_size * sizeof(size_t));
DBG("done");
}
}