Keith Packard <kei...@keithp.com> writes: > GetGlyphs is supposed to always return the full list of characters > when there is a default character available. However, if an > application opens a 16-bit two dimensional font and then draws with > 8-bit requests, GetGlyphs will return zero glyphs if there is no 0th > row. This is probably a bug in GetGlyphs, but it's easy to protect > glamor from it by simply falling through to the case that handles > GetGlyphs failures for fonts without a default character. > > Signed-off-by: Keith Packard <kei...@keithp.com> > --- > glamor/glamor_text.c | 28 ++++++++++++++++++---------- > 1 file changed, 18 insertions(+), 10 deletions(-) > > diff --git a/glamor/glamor_text.c b/glamor/glamor_text.c > index 395116d..4db2adc 100644 > --- a/glamor/glamor_text.c > +++ b/glamor/glamor_text.c > @@ -37,6 +37,7 @@ glamor_get_glyphs(FontPtr font, glamor_font_t *glamor_font, > unsigned long nglyphs; > FontEncoding encoding; > int char_step; > + int c; > > if (sixteen) { > char_step = 2; > @@ -49,7 +50,7 @@ glamor_get_glyphs(FontPtr font, glamor_font_t *glamor_font, > encoding = Linear8Bit; > } > > - /* If the font has a default character, then we don't have to > + /* If the font has a default character, then we shouldn't have to > * worry about missing glyphs, so just get the whole string all at > * once. Otherwise, we have to fetch chars one at a time to notice > * missing ones. > @@ -57,15 +58,22 @@ glamor_get_glyphs(FontPtr font, glamor_font_t > *glamor_font, > if (glamor_font->default_char) { > GetGlyphs(font, (unsigned long) count, (unsigned char *) chars, > encoding, &nglyphs, charinfo); > - } else { > - int c; > - for (c = 0; c < count; c++) { > - GetGlyphs(font, 1, (unsigned char *) chars, > - encoding, &nglyphs, &charinfo[c]); > - if (!nglyphs) > - charinfo[c] = NULL; > - chars += char_step; > - } > + > + /* Make sure it worked -- it may fail > + * if the font is a 2D font without a first row, > + * and the application sends a 1-d request, > + * the font will actually return zero glyphs > + */ > + if (nglyphs == count) > + return;
You previously said you were going to update the comment here (and the commit message), but it doesn't look like that happened. I think the bug should just get fixed in libXfont and have the server rely on it.
pgpyhbwudSebT.pgp
Description: PGP signature
_______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel