From 10e9f99fb271ed405d177db9870e4ffce46f8f68 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 6 May 2025 17:35:05 +0200 Subject: [PATCH] exa: protect against NULL pointer dereference Since GetPictureScreenIfSet() explicitly can return NULL, better be prepared for that to happen (instead of hard crash) Signed-off-by: Enrico Weigelt, metux IT consult --- exa/exa.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index 0422c615f..161a7d417 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -740,7 +740,7 @@ exaCloseScreen(ScreenPtr pScreen) ExaScreenPriv(pScreen); PictureScreenPtr ps = GetPictureScreenIfSet(pScreen); - if (ps->Glyphs == exaGlyphs) + if (ps && ps->Glyphs == exaGlyphs) exaGlyphsFini(pScreen); if (pScreen->BlockHandler == ExaBlockHandler) @@ -765,12 +765,15 @@ exaCloseScreen(ScreenPtr pScreen) unwrap(pExaScr, pScreen, SharePixmapBacking); if (pExaScr->SavedSetSharedPixmapBacking) unwrap(pExaScr, pScreen, SetSharedPixmapBacking); - unwrap(pExaScr, ps, Composite); - if (pExaScr->SavedGlyphs) - unwrap(pExaScr, ps, Glyphs); - unwrap(pExaScr, ps, Trapezoids); - unwrap(pExaScr, ps, Triangles); - unwrap(pExaScr, ps, AddTraps); + + if (ps) { + unwrap(pExaScr, ps, Composite); + if (pExaScr->SavedGlyphs) + unwrap(pExaScr, ps, Glyphs); + unwrap(pExaScr, ps, Trapezoids); + unwrap(pExaScr, ps, Triangles); + unwrap(pExaScr, ps, AddTraps); + } free(pExaScr); @@ -1019,7 +1022,7 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo) } } - if (ps->Glyphs == exaGlyphs) + if (ps && ps->Glyphs == exaGlyphs) exaGlyphsInit(pScreen); LogMessage(X_INFO, "EXA(%d): Driver registered support for the following"