From cf18adf033394f35de1af1eef7d96723cac39329 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Tue, 15 Oct 1996 21:56:27 +0000 Subject: [PATCH] * 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. --- libguile/alist.c | 45 +++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/libguile/alist.c b/libguile/alist.c index 21eae2c52..1f778ac12 100644 --- a/libguile/alist.c +++ b/libguile/alist.c @@ -76,15 +76,12 @@ scm_sloppy_assq(x, alist) SCM x; 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)) - { - tmp = SCM_CAR(alist); - if (SCM_NIMP (tmp) && SCM_CONSP (tmp) && (SCM_CAR (tmp)==x)) - return tmp; - } + SCM tmp = SCM_CAR(alist); + if (SCM_NIMP (tmp) && SCM_CONSP (tmp) && (SCM_CAR (tmp)==x)) + return tmp; } return SCM_BOOL_F; } @@ -98,17 +95,13 @@ scm_sloppy_assv(x, alist) SCM x; 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)) - { - tmp = SCM_CAR(alist); - if ( SCM_NIMP (tmp) - && SCM_CONSP (tmp) - && SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), x))) - return tmp; - } + SCM tmp = SCM_CAR(alist); + if (SCM_NIMP (tmp) + && SCM_CONSP (tmp) + && SCM_NFALSEP (scm_eqv_p (SCM_CAR (tmp), x))) + return tmp; } return SCM_BOOL_F; } @@ -121,17 +114,13 @@ scm_sloppy_assoc(x, alist) SCM x; 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)) - { - tmp = SCM_CAR(alist); - if ( SCM_NIMP (tmp) - && SCM_CONSP (tmp) - && SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), x))) - return tmp; - } + SCM tmp = SCM_CAR(alist); + if (SCM_NIMP (tmp) + && SCM_CONSP (tmp) + && SCM_NFALSEP (scm_equal_p (SCM_CAR (tmp), x))) + return tmp; } return SCM_BOOL_F; }