]> code.delx.au - gnu-emacs/commitdiff
Avoid assertion violations in compact_font_cache_entry
authorEli Zaretskii <eliz@gnu.org>
Tue, 29 Dec 2015 18:07:23 +0000 (20:07 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 29 Dec 2015 18:07:23 +0000 (20:07 +0200)
* src/alloc.c (compact_font_cache_entry): Don't use VECTORP to
avoid assertion violation in ASIZE.  (Bug#22263)

src/alloc.c

index 23ddd83d7d655223812b6df6cebd946cb19f4a20..fe55cde49c91c45b12bbbe848cbe9d106765925e 100644 (file)
@@ -5346,7 +5346,10 @@ compact_font_cache_entry (Lisp_Object entry)
       /* Consider OBJ if it is (font-spec . [font-entity font-entity ...]).  */
       if (CONSP (obj) && GC_FONT_SPEC_P (XCAR (obj))
          && !VECTOR_MARKED_P (GC_XFONT_SPEC (XCAR (obj)))
-         && VECTORP (XCDR (obj)))
+         /* Don't use VECTORP here, as that calls ASIZE, which could
+            hit assertion violation during GC.  */
+         && (VECTORLIKEP (XCDR (obj))
+             && ! (gc_asize (XCDR (obj)) & PSEUDOVECTOR_FLAG)))
        {
          ptrdiff_t i, size = gc_asize (XCDR (obj));
          Lisp_Object obj_cdr = XCDR (obj);