Fix memleak - dedup - deduplicating backup program HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 88a8835e3138a285503a2a93454daa1220caa490 DIR parent 0c04bdbe93b0bda78e8122d1a4a418f6f2fa7ad2 HTML Author: sin <sin@2f30.org> Date: Sun, 5 May 2019 20:27:39 +0100 Fix memleak Diffstat: M bstorage.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- DIR diff --git a/bstorage.c b/bstorage.c @@ -708,17 +708,18 @@ bscheck(struct bctx *bctx, unsigned char *md) return -1; } - if (lseek(sctx->fd, bd->offset, SEEK_SET) < 0) { - bseterr("lseek: %s", strerror(errno)); - return -1; - } - buf = malloc(bd->size); if (buf == NULL) { bseterr("malloc: %s", strerror(errno)); return -1; } + if (lseek(sctx->fd, bd->offset, SEEK_SET) < 0) { + free(buf); + bseterr("lseek: %s", strerror(errno)); + return -1; + } + if (xread(sctx->fd, buf, bd->size) != bd->size) { free(buf); bseterr("failed to read block: %s", strerror(errno)); @@ -732,9 +733,11 @@ bscheck(struct bctx *bctx, unsigned char *md) } if (memcmp(key.md, md, MDSIZE) != 0) { + free(buf); bseterr("block mismatch"); return -1; } + free(buf); return 0; }