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 ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
