=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/line.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- src/usr.bin/less/line.c 2005/08/27 17:17:54 1.8 +++ src/usr.bin/less/line.c 2006/01/11 19:20:10 1.9 @@ -80,14 +80,18 @@ expand_linebuf() { int new_size = size_linebuf * 2; - char *new_buf = (char *) realloc(linebuf, new_size); - char *new_attr = (char *) realloc(attr, new_size); - if (new_buf == NULL || new_attr == NULL) - { - if (new_attr != NULL) - free(new_attr); - if (new_buf != NULL) - free(new_buf); + char *new_buf; + char *new_attr; + + new_buf = realloc(linebuf, new_size); + if (new_buf == NULL) + return 1; + new_attr = realloc(attr, new_size); + if (new_attr == NULL) { + /* realloc linebuf back to original size */ + linebuf = realloc(new_buf, size_linebuf); + if (linebuf == NULL) + err(1, NULL); return 1; } memset(new_buf + size_linebuf, 0, new_size - size_linebuf);