From c78baabfc2e52a99d85d2e28f8f67d75e4d93778 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 8 Jun 2011 10:43:47 -0700 Subject: [PATCH] * alloc.c (Fmake_bool_vector): Don't assume vector size fits in int. --- src/ChangeLog | 3 +++ src/alloc.c | 5 +---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 64f346baa98..6da301c9d07 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,7 @@ 2011-06-08 Paul Eggert + * alloc.c (Fmake_bool_vector): Don't assume vector size fits in int. + * alloc.c: Catch some string size overflows that we were missing. (XMALLOC_OVERRUN_CHECK_SIZE) [!XMALLOC_OVERRUN_CHECK]: Define to 0, for convenience in STRING_BYTES_MAX. @@ -10,6 +12,7 @@ size_t overflow on (unusual) hosts where SIZE_MAX <= min (PTRDIFF_MAX, MOST_POSITIVE_FIXNUM), e.g., when size_t is 32 bits and ptrdiff_t and EMACS_INT are both 64 bits. + * character.c, coding.c, doprnt.c, editfns.c, eval.c: All uses of STRING_BYTES_MAX replaced by STRING_BYTES_BOUND. * lisp.h (STRING_BYTES_BOUND): Renamed from STRING_BYTES_MAX. diff --git a/src/alloc.c b/src/alloc.c index fa4f1d38130..88542e86c48 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -2246,7 +2246,6 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */) { register Lisp_Object val; struct Lisp_Bool_Vector *p; - int real_init, i; EMACS_INT length_in_chars, length_in_elts; int bits_per_value; @@ -2268,9 +2267,7 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */) p = XBOOL_VECTOR (val); p->size = XFASTINT (length); - real_init = (NILP (init) ? 0 : -1); - for (i = 0; i < length_in_chars ; i++) - p->data[i] = real_init; + memset (p->data, NILP (init) ? 0 : -1, length_in_chars); /* Clear the extraneous bits in the last byte. */ if (XINT (length) != length_in_chars * BOOL_VECTOR_BITS_PER_CHAR) -- 2.39.2