Subject: bug#22526: 25.0.90; Crash starting gnus

From: Eli Zaretskii <[email-masked]>
Date: Sat, 13 Feb 2016 12:44:11 +0200

> Date: Sat, 13 Feb 2016 10:28:37 +0200
> From: Eli Zaretskii <[email-masked]>
> Cc: [email-masked]
> 
> FWIW, I'm not really sure that patch will fix the problem, for 2
> reasons: (1) the code it fixes should only get executed very rarely,
> if ever; and (2) according to my reading of gap_left, it should have
> touched these addresses just before hitting the segfault.  So I
> believe there's some other factor at work here I cannot figure out.

Answering my own question: #2 above can happen if the gap was already
at the end of buffer text -- in that case, gap_left does nothing
except update the gap position.  The values shown in one of the
previous backtraces indicate this is indeed what happened here.  And
in that case, line 411 of insdel.c is indeed the first one where the
additional memory allocated by enlarge_buffer_text is touched.

So it looks like the problem is indeed somewhere in w32heap.c.

Btw, I see in mmap_malloc a problem similar to the one I tried to fix
with the patch for mmap_realloc: if the call to VirtualAlloc that
commits the reserved memory fails, mmap_malloc won't return NULL as it
should.

AFAIU, failure to commit reserved memory could happen if the system is
short on physical memory.  Are there other reasons?