1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Marcus Spencer <marcus@marcusspencer.us>
Date: Fri, 22 May 2026 01:28:46 -0500
Subject: [PATCH] Fix a null pointer dereference when computing a pattern from
a FreeType face that has no family name
Changelog: fixed
---
src/fcfreetype.c | 39 +++++++++++++++++++++------------------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index c57f9b33acac..05c2e8a00471 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -2080,28 +2080,31 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
int generic_family = FC_FAMILY_UNKNOWN;
elt = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT);
- for (l = FcPatternEltValues (elt); l; l = FcValueListNext (l)) {
- FcValue v = FcValueCanonicalize (&l->value);
+ if (elt) {
+ for (l = FcPatternEltValues (elt); l; l = FcValueListNext (l)) {
+ FcValue v = FcValueCanonicalize (&l->value);
- if (v.type == FcTypeString) {
- if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"mono")) {
- generic_family = FC_FAMILY_MONO;
- break;
- } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"sans")) {
- generic_family = FC_FAMILY_SANS;
- break;
- } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"serif")) {
- generic_family = FC_FAMILY_SERIF;
- break;
- } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"emoji")) {
- generic_family = FC_FAMILY_EMOJI;
- break;
- } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"math")) {
- generic_family = FC_FAMILY_MATH;
- break;
+ if (v.type == FcTypeString) {
+ if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"mono")) {
+ generic_family = FC_FAMILY_MONO;
+ break;
+ } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"sans")) {
+ generic_family = FC_FAMILY_SANS;
+ break;
+ } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"serif")) {
+ generic_family = FC_FAMILY_SERIF;
+ break;
+ } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"emoji")) {
+ generic_family = FC_FAMILY_EMOJI;
+ break;
+ } else if (FcStrStrIgnoreCase (v.u.s, (FcChar8 *)"math")) {
+ generic_family = FC_FAMILY_MATH;
+ break;
+ }
}
}
}
+
FcPatternObjectAddInteger(pat, FC_GENERIC_FAMILY_OBJECT, generic_family);
}
|