[Fontconfig] FcPatternGetInteger does not yield a weight for some entries in multi-weight .ttf

Sean Whitton spwhitton at spwhitton.name
Mon Jan 3 02:03:54 UTC 2022


[re-send; looks like the list silently drops mail from non-subscribers]

Hello,

Emacs is crashing[1] when Inconsolata-VariableFont_wdth,wght.ttf[2] is
installed and I'm trying to understand why.  This is what I know.  We
call FcFontList to obtain an FcFontSet, and then for each FcPattern in
that list we produce a Lisp vector containing the attributes of the
font, and that goes into the Emacs-specific font selection code.  In
particular, in order to populate the weight field in that vector, we
call FcPatternGetInteger on the pattern, passing FC_WEIGHT as the second
argument.  For most fonts this yields an integer representing the
weight.

When Inconsolata-VariableFont_wdth,wght.ttf is installed, the FcFontSet
contains multiple FcPatterns corresponding to entries in that file.  For
most of these, FcPatternGetInteger with FC_WEIGHT yields an integer.
But for some of them, it does not; FcPatternGetInteger (and
FcPatternGetDouble) do not return the success value FcResultMatch.
Emacs's font code assumes that there is a weight associated to every
font, and so there is a crash.

One option to fix this is just to skip over entries in the FcFontSet for
which FcPatternGetInteger is unable to return a weight.  But is that the
correct thing to do?  I don't really understand these multi-weight .ttf
files -- what might it mean if entries in them do not seem to have a
weight at all?

Many thanks!

[1]  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52888
[2]  https://github.com/googlefonts/Inconsolata/tree/main/fonts/variable

-- 
Sean Whitton


More information about the Fontconfig mailing list