1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00

* alist.c (scm_sloppy_assq, scm_sloppy_assv, scm_sloppy_assoc):

Don't crash when passed an improper list terminated by a
non-immediate value.
This commit is contained in:
Jim Blandy 1996-10-15 21:56:27 +00:00
parent fcd69146b1
commit cf18adf033

View file

@ -76,16 +76,13 @@ scm_sloppy_assq(x, alist)
SCM x; SCM x;
SCM alist; SCM alist;
{ {
SCM tmp;
for(;SCM_NIMP(alist);alist = SCM_CDR(alist)) for (; SCM_NIMP (alist) && SCM_CONSP (alist); alist = SCM_CDR (alist))
{ {
if (SCM_CONSP(alist)) SCM tmp = SCM_CAR(alist);
{
tmp = SCM_CAR(alist);
if (SCM_NIMP (tmp) && SCM_CONSP (tmp) && (SCM_CAR (tmp)==x)) if (SCM_NIMP (tmp) && SCM_CONSP (tmp) && (SCM_CAR (tmp)==x))
return tmp; return tmp;
} }
}
return SCM_BOOL_F; return SCM_BOOL_F;
} }
@ -98,18 +95,14 @@ scm_sloppy_assv(x, alist)
SCM x; SCM x;
SCM alist; SCM alist;
{ {
SCM tmp; for (; SCM_NIMP (alist) && SCM_CONSP (alist); alist = SCM_CDR (alist))
for(;SCM_NIMP(alist);alist = SCM_CDR(alist))
{ {
if (SCM_CONSP(alist)) SCM tmp = SCM_CAR(alist);
{
tmp = SCM_CAR(alist);
if (SCM_NIMP (tmp) if (SCM_NIMP (tmp)
&& SCM_CONSP (tmp) && SCM_CONSP (tmp)
&& SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), x))) && SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), x)))
return tmp; return tmp;
} }
}
return SCM_BOOL_F; return SCM_BOOL_F;
} }
@ -121,18 +114,14 @@ scm_sloppy_assoc(x, alist)
SCM x; SCM x;
SCM alist; SCM alist;
{ {
SCM tmp; for (; SCM_NIMP (alist) && SCM_CONSP (alist); alist = SCM_CDR (alist))
for(;SCM_NIMP(alist);alist = SCM_CDR(alist))
{ {
if (SCM_CONSP(alist)) SCM tmp = SCM_CAR(alist);
{
tmp = SCM_CAR(alist);
if (SCM_NIMP (tmp) if (SCM_NIMP (tmp)
&& SCM_CONSP (tmp) && SCM_CONSP (tmp)
&& SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), x))) && SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), x)))
return tmp; return tmp;
} }
}
return SCM_BOOL_F; return SCM_BOOL_F;
} }