summaryrefslogtreecommitdiff
path: root/libs/fontconfig/null-pointer-dereference-when-computing-a-patt.patch
blob: 572582c0c863f4a5df50e1fbe6801874c0816fa3 (plain)
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);
     }