if (length > sizeof(c->current.pattern))
if (length > XLFDMAXFONTNAMELEN)
ListFonts(client, pattern, length, max_names)    ClientPtr   client;    unsigned char *pattern;    unsigned int length;    unsigned int max_names;{    int         i;    LFclosurePtr c;    if (length > sizeof(c->current.pattern))	return BadAlloc;    if (!(c = (LFclosurePtr) xalloc(sizeof *c)))	return BadAlloc;    c->fpe_list = (FontPathElementPtr *)	xalloc(sizeof(FontPathElementPtr) * num_fpes);    if (!c->fpe_list) {	xfree(c);	return BadAlloc;    }    c->names = MakeFontNamesRecord(max_names < 100 ? max_names : 100);    if (!c->names)    {	xfree(c->fpe_list);	xfree(c);	return BadAlloc;    }    memmove( c->current.pattern, pattern, length);    for (i = 0; i < num_fpes; i++) {	c->fpe_list[i] = font_path_elements[i];	UseFPE(c->fpe_list[i]);    }    c->client = client;    c->num_fpes = num_fpes;    c->current.patlen = length;    c->current.current_fpe = 0;    c->current.max_names = max_names;    c->current.list_started = FALSE;    c->current.private = 0;    c->haveSaved = FALSE;    c->slept = FALSE;    c->savedName = 0;    doListFontsAndAliases(client, c);    return Success;}