Memory leak in receivelog.c when receiving stream

Started by Michael Paquierover 11 years ago3 messageshackers
Jump to latest
#1Michael Paquier
michael@paquier.xyz

Hi all,

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.
Regards,
--
Michael

Attachments:

20150113_receivelog_leak_fix.patchtext/x-diff; charset=US-ASCII; name=20150113_receivelog_leak_fix.patchDownload+12-7
#2Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Michael Paquier (#1)
Re: Memory leak in receivelog.c when receiving stream

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Michael Paquier
michael@paquier.xyz
In reply to: Heikki Linnakangas (#2)
Re: Memory leak in receivelog.c when receiving stream

On Tue, Jan 13, 2015 at 5:45 PM, Heikki Linnakangas
<hlinnakangas@vmware.com> wrote:

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

Right. Sorry for the noise.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers