>From c27ea3054d37a38c64f339e30044b1f463b9affe Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 5 Oct 2017 17:59:07 -0700 Subject: [PATCH 2/3] Do not malloc more than PTRDIFF_MAX * src/alloc.c (lmalloc, lrealloc): Do not allocate objects containing more than PTRDIFF_MAX bytes, as they would cause pointer subtraction to stop working. Much of Emacs already checks for this; this change closes a couple of loopholes. --- src/alloc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/alloc.c b/src/alloc.c index 2e6399e7f8..ed482c88f2 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -1440,6 +1440,12 @@ laligned (void *p, size_t size) static void * lmalloc (size_t size) { + if (PTRDIFF_MAX < size) + { + errno = ENOMEM; + return NULL; + } + #if USE_ALIGNED_ALLOC if (! MALLOC_IS_GC_ALIGNED && size % GCALIGNMENT == 0) return aligned_alloc (GCALIGNMENT, size); @@ -1460,6 +1466,12 @@ lmalloc (size_t size) static void * lrealloc (void *p, size_t size) { + if (PTRDIFF_MAX < size) + { + errno = ENOMEM; + return NULL; + } + while (true) { p = realloc (p, size); -- 2.13.6