From 0dff3b37bebf5f7cf896a69fc567394b55b1c68f Mon Sep 17 00:00:00 2001 From: Luiz Augusto Von Dentz Date: Fri, 18 Jun 2010 16:05:41 +0300 Subject: [PATCH] obexd: Fix memory leak when freeing transfer parameters --- obexd/client/transfer.c | 12 +++++++++--- obexd/client/transfer.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c index 373e4e4a5..b85f2fbce 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c @@ -158,7 +158,11 @@ static void transfer_free(struct transfer_data *transfer) session_unref(session); - g_free(transfer->params); + if (transfer->params != NULL) { + g_free(transfer->params->data); + g_free(transfer->params); + } + g_free(transfer->callback); g_free(transfer->filename); g_free(transfer->name); @@ -251,7 +255,8 @@ static void get_xfer_listing_progress(GwObexXfer *xfer, bsize = transfer->buffer_len - transfer->filled; if (bsize < 1) { transfer->buffer_len += DEFAULT_BUFFER_SIZE; - transfer->buffer = g_realloc(transfer->buffer, transfer->buffer_len); + transfer->buffer = g_realloc(transfer->buffer, + transfer->buffer_len); } transfer->buffer[transfer->filled] = '\0'; @@ -407,13 +412,14 @@ int transfer_get(struct transfer_data *transfer, transfer_callback_t func, return -EALREADY; if (g_strcmp0(transfer->type, "x-bt/vcard-listing") == 0 || + g_strcmp0(transfer->type, "x-bt/phonebook") == 0 || g_strcmp0(transfer->type, "x-obex/folder-listing") == 0) cb = get_xfer_listing_progress; else { int fd = open(transfer->name ? : transfer->filename, O_WRONLY | O_CREAT, 0600); - if (transfer->fd < 0) { + if (fd < 0) { error("open(): %s(%d)", strerror(errno), errno); return -errno; } diff --git a/obexd/client/transfer.h b/obexd/client/transfer.h index dc0f3a416..500232b44 100644 --- a/obexd/client/transfer.h +++ b/obexd/client/transfer.h @@ -24,7 +24,7 @@ #include struct transfer_params { - const guint8 *data; + guint8 *data; gint size; }; -- 2.47.3