From: Arne Redlich Date: Tue, 18 Feb 2014 19:56:24 +0000 (+0100) Subject: nfs_pread_async: plug potential memleaks X-Git-Tag: upstream/1.9.6^2~85 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=c8f0bac1bbe9b0e70607979d51b74e59304fcc41;p=deb_libnfs.git nfs_pread_async: plug potential memleaks Spotted by clang analyzer. This also introduces asserts to help clang analyzer avoid reporting false positives. Signed-off-by: Arne Redlich --- diff --git a/lib/libnfs.c b/lib/libnfs.c index c697895..66f13a3 100644 --- a/lib/libnfs.c +++ b/lib/libnfs.c @@ -1578,6 +1578,9 @@ int nfs_pread_async(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offse return 0; } + assert(count > 0); + assert(data->num_calls == 0); + /* trying to read more than maximum server read size, we has to chop it up into smaller * reads and collect into a reassembly buffer. * we send all reads in parallel so that performance is still good. @@ -1605,6 +1608,8 @@ int nfs_pread_async(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offse mdata = malloc(sizeof(struct nfs_mcb_data)); if (mdata == NULL) { rpc_set_error(nfs->rpc, "out of memory: failed to allocate nfs_mcb_data structure"); + if (data->num_calls == 0) + free_nfs_cb_data(data); return -1; } memset(mdata, 0, sizeof(struct nfs_mcb_data)); @@ -1621,6 +1626,8 @@ int nfs_pread_async(struct nfs_context *nfs, struct nfsfh *nfsfh, uint64_t offse rpc_set_error(nfs->rpc, "RPC error: Failed to send READ call for %s", data->path); data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data); free(mdata); + if (data->num_calls == 0) + free_nfs_cb_data(data); return -1; }