X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=inline;f=lib%2Flibnfs.c;h=2599accf6e14877b38b4a5dc9cf258ef9fbaff43;hb=206a2ff644dc30bedda747d53dee2659f7dc634f;hp=61cb29f6c1cc8f3eaf575aabb098f2fd89916020;hpb=b2fc5c54d9510d2f83d556ef871fc0ce3a2fb582;p=deb_libnfs.git diff --git a/lib/libnfs.c b/lib/libnfs.c index 61cb29f..2599acc 100644 --- a/lib/libnfs.c +++ b/lib/libnfs.c @@ -532,6 +532,7 @@ void free_nfs_cb_data(struct nfs_cb_data *data) } if (data->continue_data != NULL) { + assert(data->free_continue_data); data->free_continue_data(data->continue_data); data->continue_data = NULL; } @@ -1105,6 +1106,8 @@ static int nfs_lookuppath_async(struct nfs_context *nfs, const char *path, nfs_c if (data == NULL) { rpc_set_error(nfs->rpc, "out of memory: failed to allocate " "nfs_cb_data structure"); + if (free_continue_data) + free_continue_data(continue_data); return -1; } memset(data, 0, sizeof(struct nfs_cb_data)); @@ -2369,6 +2372,7 @@ int nfs_creat_async(struct nfs_context *nfs, const char *path, int mode, nfs_cb ptr = strrchr(new_path, '/'); if (ptr == NULL) { rpc_set_error(nfs->rpc, "Invalid path %s", path); + free(new_path); return -1; } *ptr = 0; @@ -2590,6 +2594,7 @@ int nfs_mknod_async(struct nfs_context *nfs, const char *path, int mode, int dev ptr = strrchr(cb_data->path, '/'); if (ptr == NULL) { rpc_set_error(nfs->rpc, "Invalid path %s", path); + free_mknod_cb_data(cb_data); return -1; } *ptr = 0; @@ -3429,10 +3434,10 @@ int nfs_fchown_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int chown_data->uid = uid; chown_data->gid = gid; - data = malloc(sizeof(struct nfs_cb_data)); if (data == NULL) { rpc_set_error(nfs->rpc, "out of memory. failed to allocate memory for fchown data"); + free(chown_data); return -1; } memset(data, 0, sizeof(struct nfs_cb_data)); @@ -3440,6 +3445,7 @@ int nfs_fchown_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int data->cb = cb; data->private_data = private_data; data->continue_data = chown_data; + data->free_continue_data = free; data->fh.data.data_len = nfsfh->fh.data.data_len; data->fh.data.data_val = malloc(data->fh.data.data_len); if (data->fh.data.data_val == NULL) { @@ -3449,7 +3455,6 @@ int nfs_fchown_async(struct nfs_context *nfs, struct nfsfh *nfsfh, int uid, int } memcpy(data->fh.data.data_val, nfsfh->fh.data.data_val, data->fh.data.data_len); - if (nfs_chown_continue_internal(nfs, data) != 0) { free_nfs_cb_data(data); return -1;