]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix integer overflow in oversize vectors
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 8 Dec 2018 18:47:38 +0000 (10:47 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 8 Dec 2018 18:50:15 +0000 (10:50 -0800)
* src/alloc.c (allocate_vector): Fix integer overflow when
allocating very large vectors, by taking large_vector_offset
into account.  Assume C99.

src/alloc.c

index 596de3af85e27e4f559bb910e84a23df742cd6b4..8eaa810e53ad64e8e1ac05a7f17d27ad10a051f8 100644 (file)
@@ -3388,12 +3388,11 @@ allocate_vectorlike (ptrdiff_t len)
 struct Lisp_Vector *
 allocate_vector (EMACS_INT len)
 {
-  struct Lisp_Vector *v;
-  ptrdiff_t nbytes_max = min (PTRDIFF_MAX, SIZE_MAX);
-
-  if (min ((nbytes_max - header_size) / word_size, MOST_POSITIVE_FIXNUM) < len)
+  ptrdiff_t wordbytes_max = (min (PTRDIFF_MAX, SIZE_MAX)
+                            - header_size - large_vector_offset);
+  if (min (wordbytes_max / word_size, MOST_POSITIVE_FIXNUM) < len)
     memory_full (SIZE_MAX);
-  v = allocate_vectorlike (len);
+  struct Lisp_Vector *v = allocate_vectorlike (len);
   if (len)
     v->header.size = len;
   return v;