From 80191ec6a13e1d2172ee9e70e2d50d1e04b6fb0e Mon Sep 17 00:00:00 2001
From: Marcus Spencer <marcus@marcusspencer.us>
Date: Fri, 22 May 2026 13:56:36 -0500
Subject: [PATCH] Fix a null pointer dereference when computing a pattern from
 an FT_Face that has no family

Closes #521

See
---
 src/fcfreetype.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index c57f9b33..05c2e8a0 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);
     }
 
-- 
GitLab

