Hi all

In src\backend\utils\misc\guc.c, I found a potential memory leak.

make_absolute_path() return a malloc'd copy, we should free memory before the 
function return false.
----------------------------------------------------------------------------
SelectConfigFiles(const char *userDoption, const char *progname)
{
......
        /* configdir is -D option, or $PGDATA if no -D */
        if (userDoption)
                configdir = make_absolute_path(userDoption);  ★
        else
                configdir = make_absolute_path(getenv("PGDATA")); ★

        if (configdir && stat(configdir, &stat_buf) != 0)
        {
                write_stderr("%s: could not access directory \"%s\": %s\n",
                                         progname,
                                         configdir,
                                         strerror(errno));
                if (errno == ENOENT)
                        write_stderr("Run initdb or pg_basebackup to initialize 
a PostgreSQL data directory.\n");
                ★// Need to free memory of configdir
                return false;
        }
......
---------------------------------------------------------------------------

Refer to the following files for the implementation of make_absolute_path().

file:  src\port\path.c
/*
 * make_absolute_path
 *
 * If the given pathname isn't already absolute, make it so, interpreting
 * it relative to the current working directory.
 *
 * Also canonicalizes the path.  The result is always a malloc'd copy.





Attachment: guc.patch
Description: guc.patch

Reply via email to