1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-09 21:40:33 +02:00

Fix type confusion in heap-numbers-equal? calls from VM

When heap-numbers-equal? is called from eqv?, we have already ensured
that the both objects have the same heap type.  However when called by
the VM, the precondition is just that both are heap numbers -- not
necessarily of the same type.  Fix to add an additional check in
heap-numbers-equal?.  Could cause crashers!

* libguile/eq.c (scm_i_heap_numbers_equal_p): Add additional check.
This commit is contained in:
Andy Wingo 2022-01-06 10:28:12 +01:00
parent d70c1dbebf
commit 0e505b7036

View file

@ -159,7 +159,14 @@ scm_i_fraction_equalp (SCM x, SCM y)
int
scm_i_heap_numbers_equal_p (SCM x, SCM y)
{
if (SCM_IMP (x)) abort();
// Precondition: both X and Y are heap numbers.
if (!(SCM_HEAP_OBJECT_P (x) && SCM_HEAP_OBJECT_P (y)))
abort();
// eqv? already checks that the heap tags are the same, but we are
// also called by the VM, which only ensures that both values are
// numbers. So check tags here too.
if (SCM_CELL_TYPE (x) != SCM_CELL_TYPE (y))
return 0;
switch (SCM_TYP16 (x))
{
case scm_tc16_big: