Avoid crashes when a fontset has strange entries
* src/fontset.c (reorder_font_vector): Skip nil entries in the loop that assigns scores to rfont_def's. (fontset_compare_rfontdef): Cope with nil. This has the effect of moving any nil entries to the end of the font-group, and avoids crashing if an element other than the last in the font-group is nil. (Bug#39892)
This commit is contained in:
parent
1814c7e158
commit
88c6db9196
1 changed files with 10 additions and 2 deletions
|
@ -367,8 +367,14 @@ fontset_add (Lisp_Object fontset, Lisp_Object range, Lisp_Object elt, Lisp_Objec
|
||||||
static int
|
static int
|
||||||
fontset_compare_rfontdef (const void *val1, const void *val2)
|
fontset_compare_rfontdef (const void *val1, const void *val2)
|
||||||
{
|
{
|
||||||
return (RFONT_DEF_SCORE (*(Lisp_Object *) val1)
|
Lisp_Object v1 = *(Lisp_Object *) val1, v2 = *(Lisp_Object *) val2;
|
||||||
- RFONT_DEF_SCORE (*(Lisp_Object *) val2));
|
if (NILP (v1) && NILP (v2))
|
||||||
|
return 0;
|
||||||
|
else if (NILP (v1))
|
||||||
|
return INT_MIN;
|
||||||
|
else if (NILP (v2))
|
||||||
|
return INT_MAX;
|
||||||
|
return (RFONT_DEF_SCORE (v1) - RFONT_DEF_SCORE (v2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update a cons cell which has this form:
|
/* Update a cons cell which has this form:
|
||||||
|
@ -400,6 +406,8 @@ reorder_font_vector (Lisp_Object font_group, struct font *font)
|
||||||
for (i = 0; i < size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
Lisp_Object rfont_def = AREF (vec, i);
|
Lisp_Object rfont_def = AREF (vec, i);
|
||||||
|
if (NILP (rfont_def))
|
||||||
|
continue;
|
||||||
Lisp_Object font_def = RFONT_DEF_FONT_DEF (rfont_def);
|
Lisp_Object font_def = RFONT_DEF_FONT_DEF (rfont_def);
|
||||||
Lisp_Object font_spec = FONT_DEF_SPEC (font_def);
|
Lisp_Object font_spec = FONT_DEF_SPEC (font_def);
|
||||||
int score = RFONT_DEF_SCORE (rfont_def) & 0xFF;
|
int score = RFONT_DEF_SCORE (rfont_def) & 0xFF;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue