* alloc.c (Fmake_bool_vector): Don't assume vector size fits in int.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 8 Jun 2011 17:43:47 +0000 (10:43 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 8 Jun 2011 17:43:47 +0000 (10:43 -0700)
src/ChangeLog
src/alloc.c

index 64f346b..6da301c 100644 (file)
@@ -1,5 +1,7 @@
 2011-06-08  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * 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.
index fa4f1d3..88542e8 100644 (file)
@@ -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)