Fix memory leak in realloc failure handling (#22188)
This commit is contained in:
		
							parent
							
								
									d6b16b0df0
								
							
						
					
					
						commit
						3df155f203
					
				
					 1 changed files with 4 additions and 3 deletions
				
			
		| 
						 | 
					@ -96,13 +96,14 @@ bool qp_lvgl_attach(painter_device_t device) {
 | 
				
			||||||
    // Set up lvgl display buffer
 | 
					    // Set up lvgl display buffer
 | 
				
			||||||
    static lv_disp_draw_buf_t draw_buf;
 | 
					    static lv_disp_draw_buf_t draw_buf;
 | 
				
			||||||
    // Allocate a buffer for 1/10 screen size
 | 
					    // Allocate a buffer for 1/10 screen size
 | 
				
			||||||
    const size_t count_required = driver->panel_width * driver->panel_height / 10;
 | 
					    const size_t count_required   = driver->panel_width * driver->panel_height / 10;
 | 
				
			||||||
    color_buffer                = color_buffer ? realloc(color_buffer, sizeof(lv_color_t) * count_required) : malloc(sizeof(lv_color_t) * count_required);
 | 
					    void *       new_color_buffer = realloc(color_buffer, sizeof(lv_color_t) * count_required);
 | 
				
			||||||
    if (!color_buffer) {
 | 
					    if (!new_color_buffer) {
 | 
				
			||||||
        qp_dprintf("qp_lvgl_attach: fail (could not set up memory buffer)\n");
 | 
					        qp_dprintf("qp_lvgl_attach: fail (could not set up memory buffer)\n");
 | 
				
			||||||
        qp_lvgl_detach();
 | 
					        qp_lvgl_detach();
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    color_buffer = new_color_buffer;
 | 
				
			||||||
    memset(color_buffer, 0, sizeof(lv_color_t) * count_required);
 | 
					    memset(color_buffer, 0, sizeof(lv_color_t) * count_required);
 | 
				
			||||||
    // Initialize the display buffer.
 | 
					    // Initialize the display buffer.
 | 
				
			||||||
    lv_disp_draw_buf_init(&draw_buf, color_buffer, NULL, count_required);
 | 
					    lv_disp_draw_buf_init(&draw_buf, color_buffer, NULL, count_required);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue