if (symbol_free_list)
{
+ ASAN_UNPOISON_SYMBOL (symbol_free_list);
XSETSYMBOL (val, symbol_free_list);
- symbol_free_list = symbol_free_list->u.s.next;
+ symbol_free_list = next_free_symbol (symbol_free_list);
}
else
{
|| off == offsetof (struct Lisp_Symbol, u.s.name)
|| off == offsetof (struct Lisp_Symbol, u.s.val)
|| off == offsetof (struct Lisp_Symbol, u.s.function)
- || off == offsetof (struct Lisp_Symbol, u.s.plist)
- || off == offsetof (struct Lisp_Symbol, u.s.next))
+ || off == offsetof (struct Lisp_Symbol, u.s.package)
+ || off == offsetof (struct Lisp_Symbol, u.s.plist))
{
struct Lisp_Symbol *s = p = cp -= off;
+ #if GC_ASAN_POISON_OBJECTS
+ if (__asan_region_is_poisoned (s, sizeof (*s)))
+ return NULL;
+ #endif
if (!deadp (s->u.s.function))
return s;
}
time we sweep this symbol_block (bug#29066). */
sym->u.s.redirect = SYMBOL_PLAINVAL;
}
- sym->u.s.next = symbol_free_list;
+ set_next_free_symbol (sym, symbol_free_list);
symbol_free_list = sym;
symbol_free_list->u.s.function = dead_object ();
- ++this_free;
+ ASAN_POISON_SYMBOL (sym);
+ ++this_free;
}
else
{
{
*sprev = sblk->next;
/* Unhook from the free list. */
- symbol_free_list = sblk->symbols[0].u.s.next;
+ ASAN_UNPOISON_SYMBOL (&sblk->symbols[0]);
+ symbol_free_list = next_free_symbol (&sblk->symbols[0]);
lisp_free (sblk);
}
else