From 3df155f203dd1f22085376ee0f86568f7f9bf63a Mon Sep 17 00:00:00 2001
From: "Kuan-Wei, Chiu" <visitorckw@gmail.com>
Date: Wed, 4 Oct 2023 06:27:11 +0800
Subject: [PATCH] Fix memory leak in realloc failure handling (#22188)

---
 quantum/painter/lvgl/qp_lvgl.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/quantum/painter/lvgl/qp_lvgl.c b/quantum/painter/lvgl/qp_lvgl.c
index 2e433d7761..877b2652c6 100644
--- a/quantum/painter/lvgl/qp_lvgl.c
+++ b/quantum/painter/lvgl/qp_lvgl.c
@@ -96,13 +96,14 @@ bool qp_lvgl_attach(painter_device_t device) {
     // Set up lvgl display buffer
     static lv_disp_draw_buf_t draw_buf;
     // Allocate a buffer for 1/10 screen size
-    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);
-    if (!color_buffer) {
+    const size_t count_required   = driver->panel_width * driver->panel_height / 10;
+    void *       new_color_buffer = realloc(color_buffer, sizeof(lv_color_t) * count_required);
+    if (!new_color_buffer) {
         qp_dprintf("qp_lvgl_attach: fail (could not set up memory buffer)\n");
         qp_lvgl_detach();
         return false;
     }
+    color_buffer = new_color_buffer;
     memset(color_buffer, 0, sizeof(lv_color_t) * count_required);
     // Initialize the display buffer.
     lv_disp_draw_buf_init(&draw_buf, color_buffer, NULL, count_required);