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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-05-06 17:35:05 +02:00
parent 6308fb6bf6
commit 10e9f99fb2

View File

@ -740,7 +740,7 @@ exaCloseScreen(ScreenPtr pScreen)
ExaScreenPriv(pScreen); ExaScreenPriv(pScreen);
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen); PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
if (ps->Glyphs == exaGlyphs) if (ps && ps->Glyphs == exaGlyphs)
exaGlyphsFini(pScreen); exaGlyphsFini(pScreen);
if (pScreen->BlockHandler == ExaBlockHandler) if (pScreen->BlockHandler == ExaBlockHandler)
@ -765,12 +765,15 @@ exaCloseScreen(ScreenPtr pScreen)
unwrap(pExaScr, pScreen, SharePixmapBacking); unwrap(pExaScr, pScreen, SharePixmapBacking);
if (pExaScr->SavedSetSharedPixmapBacking) if (pExaScr->SavedSetSharedPixmapBacking)
unwrap(pExaScr, pScreen, SetSharedPixmapBacking); unwrap(pExaScr, pScreen, SetSharedPixmapBacking);
unwrap(pExaScr, ps, Composite);
if (pExaScr->SavedGlyphs) if (ps) {
unwrap(pExaScr, ps, Glyphs); unwrap(pExaScr, ps, Composite);
unwrap(pExaScr, ps, Trapezoids); if (pExaScr->SavedGlyphs)
unwrap(pExaScr, ps, Triangles); unwrap(pExaScr, ps, Glyphs);
unwrap(pExaScr, ps, AddTraps); unwrap(pExaScr, ps, Trapezoids);
unwrap(pExaScr, ps, Triangles);
unwrap(pExaScr, ps, AddTraps);
}
free(pExaScr); free(pExaScr);
@ -1019,7 +1022,7 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo)
} }
} }
if (ps->Glyphs == exaGlyphs) if (ps && ps->Glyphs == exaGlyphs)
exaGlyphsInit(pScreen); exaGlyphsInit(pScreen);
LogMessage(X_INFO, "EXA(%d): Driver registered support for the following" LogMessage(X_INFO, "EXA(%d): Driver registered support for the following"