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
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 |