diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 7 |
1 files changed, 5 insertions, 2 deletions
| @@ -159,14 +159,14 @@ EMACS_INT length_internal (Lisp_Object sequence, int len) | |||
| 159 | if (len < 0xffff) | 159 | if (len < 0xffff) |
| 160 | while (CONSP (sequence)) | 160 | while (CONSP (sequence)) |
| 161 | { | 161 | { |
| 162 | if (--len == 0) | 162 | if (--len <= 0) |
| 163 | return -1; | 163 | return -1; |
| 164 | sequence = XCDR (sequence); | 164 | sequence = XCDR (sequence); |
| 165 | } | 165 | } |
| 166 | /* Signal an error on circular lists. */ | 166 | /* Signal an error on circular lists. */ |
| 167 | else | 167 | else |
| 168 | FOR_EACH_TAIL (sequence) | 168 | FOR_EACH_TAIL (sequence) |
| 169 | if (--len == 0) | 169 | if (--len <= 0) |
| 170 | return -1; | 170 | return -1; |
| 171 | return len; | 171 | return len; |
| 172 | } | 172 | } |
| @@ -210,6 +210,9 @@ counted. */) | |||
| 210 | CHECK_FIXNUM (length); | 210 | CHECK_FIXNUM (length); |
| 211 | EMACS_INT len = XFIXNUM (length); | 211 | EMACS_INT len = XFIXNUM (length); |
| 212 | 212 | ||
| 213 | if (len < 0) | ||
| 214 | return Qnil; | ||
| 215 | |||
| 213 | if (CONSP (sequence)) | 216 | if (CONSP (sequence)) |
| 214 | return length_internal (sequence, len + 1) == 1? Qt: Qnil; | 217 | return length_internal (sequence, len + 1) == 1? Qt: Qnil; |
| 215 | else | 218 | else |