From 89b51ce4482c0d10abe2947fb02876784119e091 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 15 Nov 2017 20:17:59 -0800 Subject: find-max: bugfix for zero length vectors. * lib.c (find_max): Fix a regression introduced in recent work: only execute the loop when the vector isn't empty. --- lib.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'lib.c') diff --git a/lib.c b/lib.c index 09494778..cfd538df 100644 --- a/lib.c +++ b/lib.c @@ -8567,21 +8567,26 @@ val find_max(val seq, val testfun, val keyfun) case SEQ_VECLIKE: { val vec = si.obj; - val maxelt = ref(vec, zero); - val maxkey = funcall1(keyfun, maxelt); val len = length(vec); - val i; - for (i = one; lt(i, len); i = succ(i)) { - val elt = ref(vec, i); - val key = funcall1(keyfun, elt); - if (funcall2(testfun, key, maxkey)) { - maxkey = key; - maxelt = elt; + if (len != zero) { + val maxelt = ref(vec, zero); + val maxkey = funcall1(keyfun, maxelt); + val i; + + for (i = one; lt(i, len); i = succ(i)) { + val elt = ref(vec, i); + val key = funcall1(keyfun, elt); + if (funcall2(testfun, key, maxkey)) { + maxkey = key; + maxelt = elt; + } } + + return maxelt; } - return maxelt; + return nil; } case SEQ_NOTSEQ: default: -- cgit v1.2.3