Date: Thu, 13 Mar 1997 13:00:02 -0800 (PST) From: Gareth McCaughan <gjm11@dpmms.cam.ac.uk> To: freebsd-bugs Subject: Re: bin/2968: fmt dumps core on ^M Message-ID: <199703132100.NAA19892@freefall.freebsd.org>
index | next in thread | raw e-mail
The following reply was made to PR bin/2968; it has been noted by GNATS.
From: Gareth McCaughan <gjm11@dpmms.cam.ac.uk>
To: freebsd-bugs@freebsd.org
Cc: Subject: Re: bin/2968: fmt dumps core on ^M
Date: Thu, 13 Mar 1997 18:47:53 +0000
Robert Eckardt wrote:
> fmt experiences Bus error when one tries to format
> a text that contains ^M (CRs), i.e. e.g. from an
> MSDOS system.
Actually, that's not quite true. I think it only happens if you
invoke it with a file whose first line contains only non-printing
characters.
The problem is caused by the fact that, when a line of this kind is
seen, the |canonb| pointer may not get initialised; as a consequence
the loop
for (cp2--; cp2 >= canonb && *cp2 == ' '; cp2--)
(before the start of which |cp2==canonb| in this situation) loses
because pointers are compared as if they're unsigned.
I believe the following patch fixes the problem. It certainly
looks OK and repairs the test cases I've tried.
---------- patch begins ----------
*** fmt.c.orig Thu Mar 13 10:57:48 1997
--- fmt.c Thu Mar 13 18:43:13 1997
***************
*** 147,153 ****
register char *cp, *cp2, cc;
register int c, col;
#define CHUNKSIZE 1024
! static int lbufsize = 0, cbufsize = 0;
if (center) {
linebuf = malloc(BUFSIZ);
--- 147,157 ----
register char *cp, *cp2, cc;
register int c, col;
#define CHUNKSIZE 1024
! static int lbufsize = 0, cbufsize = CHUNKSIZE;
!
! canonb = malloc(CHUNKSIZE);
! if (canonb == 0)
! abort();
if (center) {
linebuf = malloc(BUFSIZ);
----------- patch ends -----------
--
Gareth McCaughan Dept. of Pure Mathematics & Mathematical Statistics,
gjm11@dpmms.cam.ac.uk Cambridge University, England.
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703132100.NAA19892>
