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:
parent
d70c1dbebf
commit
0e505b7036
1 changed files with 8 additions and 1 deletions
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue