* Aidan Kehoe <kehoea(a)parhasard.net> writes:
  Ar an triú lá déag de mí Bealtaine, scríobh Fabrice Popineau:
> I managed to compile the latest CVS natively under Win32 (and
> using my own setup ;-) but while trying the debug version, I got
> a stack corruption. The following patch cures it. 
 Cool, thank you for tracking it down. But are you sure the
 corruption appears after Stephen~s patch of
 
http://mid.gmane.org/87slnt7nrq.fsf_-_@tleepslib.sk.tsukuba.ac.jp
 was committed?  Because the first part of it looks like it would
 have roughly the same effect on the stack as Stephen~s fix, and
 the second part is an change to old code that~s been around for
 ten years without provoking a bug. 
Not at all. Stephen's patch was abour enlarging the buffer. But that
doesn't cure the fact that :
  Ibyte buf[DOC_MAX_FILENAME_LENGTH+1];
  Ibyte *buffer = buf;
  int buffer_size = sizeof (buf), space_left;
                    ^^^^^^^^^^^^
whatever the size of the buf[] array, buffer_size is set to this size.
  REGISTER Ibyte *p = buffer;
p and buffer point to the same location
  space_left = buffer_size - (p - buffer);
space_left is buffer_size
  while (space_left > 0)
    {
      int nread;
      nread = Lstream_read (XLSTREAM (instream), p, space_left);
You read buffer_size characters into buf[0 .. buffer_size - 1] that is the buf[] array is
full
      p[nread] = 0;
^^^^^^^^^^^^^^^^^^^
and then you are accessing p[buffer_size] which is prohibited whatever
the real size of the buffer is, because your buf index goes from 0 to
buffer_size - 1.
I fixed it in both places but I can acknowledge only for the first one
causing a crash.
Fabrice