Re: Memory leak in receivelog.c when receiving stream

From: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
To: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Memory leak in receivelog.c when receiving stream
Date: 2015-01-13 08:45:30
Message-ID: 54B4DB2A.2000104@vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 01/13/2015 10:18 AM, Michael Paquier wrote:
> receivelog.c is leaking memory in CopyStreamReceive when receiving COPY data.
> The issue has been spotted by coverity. The patch attached fixes the
> problem, and contains as well improved comments.
>
> *** a/src/bin/pg_basebackup/receivelog.c
> --- b/src/bin/pg_basebackup/receivelog.c
> ***************
> *** 1035,1046 **** CopyStreamReceive(PGconn *conn, long timeout, char **buffer)
> if (rawlen == 0)
> return 0;
> }
> ! if (rawlen == -1) /* end-of-streaming or error */
> return -2;
> if (rawlen == -2)
> {
> fprintf(stderr, _("%s: could not read COPY data: %s"),
> progname, PQerrorMessage(conn));
> return -1;
> }
>
> --- 1035,1056 ----
> if (rawlen == 0)
> return 0;
> }
> !
> ! /* end-of-streaming or error */
> ! if (rawlen == -1)
> ! {
> ! if (copybuf != NULL)
> ! PQfreemem(copybuf);
> return -2;
> + }
> +
> + /* failure when reading copy stream */
> if (rawlen == -2)
> {
> fprintf(stderr, _("%s: could not read COPY data: %s"),
> progname, PQerrorMessage(conn));
> + if (copybuf != NULL)
> + PQfreemem(copybuf);
> return -1;
> }

This looks like a false positive to me. PQgetCopyData() will only return
a buffer if its return value is > 0

- Heikki

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Vladimir Borodin 2015-01-13 10:11:22 Re: Check that streaming replica received all data after master shutdown
Previous Message Heikki Linnakangas 2015-01-13 08:36:28 Re: Unused variables in hstore_to_jsonb