Compare commits

...

3 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult 0931cb11ca render: NULL-protect SetPicturePictFilter()
Even though it shouldn't practically happen, better adding a trivial check,
just in case. The check is really cheap and possibly optimized-out.

| ../render/filter.c: In function ‘SetPicturePictFilter’:
| ../render/filter.c:388:36: warning: dereference of possibly-NULL ‘new_params’ [CWE-690] [-Wanalyzer-possible-null-dereference]
|   388 |         pPicture->filter_params[i] = params[i];
|       |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-09 19:11:46 +02:00
Enrico Weigelt, metux IT consult aa720e5454 render: NULL protect cpAlphaMap()
Even though it practically should never happen, but just in case, and
for silencing the analyzer, add an extra check here (which doesn't
cost us much).

| ../render/picture.c: In function ‘cpAlphaMap’:
| ../render/picture.c:1002:30: warning: dereference of NULL ‘screen’ [CWE-476] [-Wanalyzer-null-dereference]
|  1002 |         id = res->info[screen->myNum].id;
|       |                        ~~~~~~^~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-09 19:11:46 +02:00
Enrico Weigelt, metux IT consult 127294b50f render: glyph: extra NULL pointer protection
Even though it's probably never happening, but still better to protect from it,
just in case. The extra cost of it hard to measure on today's machines.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-09 19:11:46 +02:00
3 changed files with 16 additions and 7 deletions

View File

@ -387,7 +387,8 @@ SetPicturePictFilter(PicturePtr pPicture, PictFilterPtr pFilter,
pPicture->filter_nparams = nparams;
}
for (i = 0; i < nparams; i++)
pPicture->filter_params[i] = params[i];
if (pPicture->filter_params)
pPicture->filter_params[i] = params[i];
pPicture->filter = pFilter->id;
if (pPicture->pDrawable) {

View File

@ -123,6 +123,10 @@ FindGlyphRef(GlyphHashPtr hash,
CARD32 elt, step, s;
GlyphPtr glyph;
GlyphRefPtr table, gr, del;
if ((hash == NULL) || (hash->hashSet == NULL))
return NULL;
CARD32 tableSize = hash->hashSet->size;
table = hash->table;
@ -267,7 +271,7 @@ FreeGlyph(GlyphPtr glyph, int format)
gr = FindGlyphRef(&globalGlyphs[format], signature, TRUE, glyph->sha1);
if (gr - globalGlyphs[format].table != first)
DuplicateRef(glyph, "Found wrong one");
if (gr->glyph && gr->glyph != DeletedGlyph) {
if (gr && gr->glyph && gr->glyph != DeletedGlyph) {
gr->glyph = DeletedGlyph;
gr->signature = 0;
globalGlyphs[format].tableEntries--;
@ -384,6 +388,7 @@ AllocateGlyph(xGlyphInfo * gi, int fdepth)
static Bool
AllocateGlyphHash(GlyphHashPtr hash, GlyphHashSetPtr hashSet)
{
assert(hashSet);
hash->table = calloc(hashSet->size, sizeof(GlyphRefRec));
if (!hash->table)
return FALSE;
@ -418,10 +423,10 @@ ResizeGlyphHash(GlyphHashPtr hash, CARD32 change, Bool global)
glyph = hash->table[i].glyph;
if (glyph && glyph != DeletedGlyph) {
s = hash->table[i].signature;
gr = FindGlyphRef(&newHash, s, global, glyph->sha1);
gr->signature = s;
gr->glyph = glyph;
if ((gr = FindGlyphRef(&newHash, s, global, glyph->sha1))) {
gr->signature = s;
gr->glyph = glyph;
}
++newHash.tableEntries;
}
}

View File

@ -1013,7 +1013,10 @@ cpAlphaMap(void **result, XID id, ScreenPtr screen, ClientPtr client, Mask mode)
client, mode);
if (err != Success)
return err;
id = res->info[screen->myNum].id;
if (screen == NULL)
LogMessage(X_WARNING, "cpAlphaMap() screen == NULL\n");
else
id = res->info[screen->myNum].id;
}
#endif /* XINERAMA */
return dixLookupResourceByType(result, id, PictureType, client, mode);