Re: [Exim] internal error in 4.05 on FreeBSD

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Philip Hazel
Date:  
À: Exim Users
Sujet: Re: [Exim] internal error in 4.05 on FreeBSD
On Thu, 27 Jun 2002, Chad Leigh -- Shire.Net LLC wrote:

> This just started happening in my Exim 4.05 system. I am doing live
> tests with a couple of my domains and I qwatch the log files as I switch
> from 3.36 to 4.05.
>
> 2002-06-27 21:44:42 17NfFc-000C6q-00 internal error:
> store_reset(135077889) failed: pool=0       expand.c 3047

>
> Is it bad? It happens every queue run...


This turned out to be a new bug that I accidentally introduced into
4.05. It was provoked by a reference in a system filter to a header such
as $h_to: when an incoming message contained a header of that name, but
with no data. In case anybody else hits this problem before I get the next
release out (I did receive one other report), I'm posting the patch
below.

Philip

--
Philip Hazel            University of Cambridge Computing Service,
ph10@???      Cambridge, England. Phone: +44 1223 334714.




*** exim-4.05/src/expand.c  Thu Jun 13 10:32:04 2002
--- expand.c    Mon Jul  1 10:09:01 2002
***************
*** 640,646 ****
              }
            Ustrncpy(ptr, t, ilen);
            ptr += ilen;
!           if (comma != 0)
              {
              ptr[-1] = ',';
              *ptr++ = '\n';
--- 640,646 ----
              }
            Ustrncpy(ptr, t, ilen);
            ptr += ilen;
!           if (comma != 0 && ilen > 0)
              {
              ptr[-1] = ',';
              *ptr++ = '\n';
***************
*** 665,671 ****
  /* Remove trailing white space (includes newlines) and a redundant added comma
  if present. */


! if (comma != 0) ptr -= 2;
while (ptr > yield && isspace(ptr[-1])) ptr--;
*ptr = 0;
return yield;
--- 665,671 ----
/* Remove trailing white space (includes newlines) and a redundant added comma
if present. */

! if (comma != 0 && ptr > yield) ptr -= 2;
while (ptr > yield && isspace(ptr[-1])) ptr--;
*ptr = 0;
return yield;