[PATCH] gtk: Skip drawing if console surface is NULL

Weifeng Liu posted 1 patch 4 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250714141758.10062-1-weifeng.liu.z@gmail.com
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>
ui/gtk-egl.c     | 5 +----
ui/gtk-gl-area.c | 5 +----
2 files changed, 2 insertions(+), 8 deletions(-)
[PATCH] gtk: Skip drawing if console surface is NULL
Posted by Weifeng Liu 4 months ago
In gtk draw/render callbacks, add an early NULL check for the console
surface and skip drawing if it's NULL. Otherwise, attempting to fetch
its width and height crash. This change fixes Coverity CID 1610328.

In practice, this case wouldn't happen at all because we always install
a placeholder surface to the console when there is nothing to display.

Resolves: Coverity CID 1610328
Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>
---
 ui/gtk-egl.c     | 5 +----
 ui/gtk-gl-area.c | 5 +----
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
index 0b787bea25..ae9239999c 100644
--- a/ui/gtk-egl.c
+++ b/ui/gtk-egl.c
@@ -72,7 +72,7 @@ void gd_egl_draw(VirtualConsole *vc)
 #endif
     int ww, wh, pw, ph, gs;
 
-    if (!vc->gfx.gls) {
+    if (!vc->gfx.gls || !vc->gfx.ds) {
         return;
     }
 
@@ -112,9 +112,6 @@ void gd_egl_draw(VirtualConsole *vc)
         }
 #endif
     } else {
-        if (!vc->gfx.ds) {
-            return;
-        }
         eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
                        vc->gfx.esurface, vc->gfx.ectx);
 
diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
index 8151cc413c..05fc38096e 100644
--- a/ui/gtk-gl-area.c
+++ b/ui/gtk-gl-area.c
@@ -48,7 +48,7 @@ void gd_gl_area_draw(VirtualConsole *vc)
     int fbw, fbh;
     int wx_offset, wy_offset;
 
-    if (!vc->gfx.gls) {
+    if (!vc->gfx.gls || !vc->gfx.ds) {
         return;
     }
 
@@ -135,9 +135,6 @@ void gd_gl_area_draw(VirtualConsole *vc)
         }
 #endif
     } else {
-        if (!vc->gfx.ds) {
-            return;
-        }
         gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area));
 
         surface_gl_setup_viewport(vc->gfx.gls, vc->gfx.ds, pw, ph);
-- 
2.49.0
Re: [PATCH] gtk: Skip drawing if console surface is NULL
Posted by Akihiko Odaki 4 months ago
On 2025/07/14 23:17, Weifeng Liu wrote:
> In gtk draw/render callbacks, add an early NULL check for the console
> surface and skip drawing if it's NULL. Otherwise, attempting to fetch
> its width and height crash. This change fixes Coverity CID 1610328.
> 
> In practice, this case wouldn't happen at all because we always install
> a placeholder surface to the console when there is nothing to display.
> 
> Resolves: Coverity CID 1610328
> Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>

Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Re: [PATCH] gtk: Skip drawing if console surface is NULL
Posted by Marc-André Lureau 4 months ago
On Mon, Jul 14, 2025 at 6:18 PM Weifeng Liu <weifeng.liu.z@gmail.com> wrote:
>
> In gtk draw/render callbacks, add an early NULL check for the console
> surface and skip drawing if it's NULL. Otherwise, attempting to fetch
> its width and height crash. This change fixes Coverity CID 1610328.
>
> In practice, this case wouldn't happen at all because we always install
> a placeholder surface to the console when there is nothing to display.
>
> Resolves: Coverity CID 1610328
> Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>

> ---
>  ui/gtk-egl.c     | 5 +----
>  ui/gtk-gl-area.c | 5 +----
>  2 files changed, 2 insertions(+), 8 deletions(-)
>
> diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c
> index 0b787bea25..ae9239999c 100644
> --- a/ui/gtk-egl.c
> +++ b/ui/gtk-egl.c
> @@ -72,7 +72,7 @@ void gd_egl_draw(VirtualConsole *vc)
>  #endif
>      int ww, wh, pw, ph, gs;
>
> -    if (!vc->gfx.gls) {
> +    if (!vc->gfx.gls || !vc->gfx.ds) {
>          return;
>      }
>
> @@ -112,9 +112,6 @@ void gd_egl_draw(VirtualConsole *vc)
>          }
>  #endif
>      } else {
> -        if (!vc->gfx.ds) {
> -            return;
> -        }
>          eglMakeCurrent(qemu_egl_display, vc->gfx.esurface,
>                         vc->gfx.esurface, vc->gfx.ectx);
>
> diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c
> index 8151cc413c..05fc38096e 100644
> --- a/ui/gtk-gl-area.c
> +++ b/ui/gtk-gl-area.c
> @@ -48,7 +48,7 @@ void gd_gl_area_draw(VirtualConsole *vc)
>      int fbw, fbh;
>      int wx_offset, wy_offset;
>
> -    if (!vc->gfx.gls) {
> +    if (!vc->gfx.gls || !vc->gfx.ds) {
>          return;
>      }
>
> @@ -135,9 +135,6 @@ void gd_gl_area_draw(VirtualConsole *vc)
>          }
>  #endif
>      } else {
> -        if (!vc->gfx.ds) {
> -            return;
> -        }
>          gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area));
>
>          surface_gl_setup_viewport(vc->gfx.gls, vc->gfx.ds, pw, ph);
> --
> 2.49.0
>


-- 
Marc-André Lureau