(allocbuf): do not leak memory on failure and zero re-used memory,
from Markus Friedl <markus@openbsd.org> git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10657 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -136,6 +136,7 @@ allocbuf(bp, fd, blksize)
|
|||||||
{
|
{
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
char *p;
|
||||||
|
|
||||||
if (fstat(fd, &stb) < 0) {
|
if (fstat(fd, &stb) < 0) {
|
||||||
run_err("fstat: %s", strerror(errno));
|
run_err("fstat: %s", strerror(errno));
|
||||||
@@ -146,11 +147,16 @@ allocbuf(bp, fd, blksize)
|
|||||||
size = blksize;
|
size = blksize;
|
||||||
if (bp->cnt >= size)
|
if (bp->cnt >= size)
|
||||||
return (bp);
|
return (bp);
|
||||||
if ((bp->buf = realloc(bp->buf, size)) == NULL) {
|
if ((p = realloc(bp->buf, size)) == NULL) {
|
||||||
|
if (bp->buf)
|
||||||
|
free(bp->buf);
|
||||||
|
bp->buf = NULL;
|
||||||
bp->cnt = 0;
|
bp->cnt = 0;
|
||||||
run_err("%s", strerror(errno));
|
run_err("%s", strerror(errno));
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
memset(p, 0, size);
|
||||||
|
bp->buf = p;
|
||||||
bp->cnt = size;
|
bp->cnt = size;
|
||||||
return (bp);
|
return (bp);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user