Обсуждение: Memory leak in receivelog.c when receiving stream

Поиск
Список
Период
Сортировка

Memory leak in receivelog.c when receiving stream

От
Michael Paquier
Дата:
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

Вложения

Re: Memory leak in receivelog.c when receiving stream

От
Heikki Linnakangas
Дата:
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




Re: Memory leak in receivelog.c when receiving stream

От
Michael Paquier
Дата:
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