Skip site navigation (1) Skip section navigation (2)

Re: Error in recent pg_dump change (coverity)

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Martijn van Oosterhout <kleptog(at)svana(dot)org>,pgsql-hackers(at)postgresql(dot)org
Subject: Re: Error in recent pg_dump change (coverity)
Date: 2006-05-28 16:47:35
Message-ID: 20060528164735.GB11881@surnet.cl (view raw or flat)
Thread:
Lists: pgsql-hackers
Tom Lane wrote:
> Martijn van Oosterhout <kleptog(at)svana(dot)org> writes:
> > On Sun, May 28, 2006 at 12:00:33PM -0400, Tom Lane wrote:
> >> Another possibility is to just MemSet the whole PGresult struct
> >> to zeroes before free'ing it.
> 
> > Probably better actually, since by setting ntups to zero also,
> > PQgetvalue will return a warning (row number out of range) rather than
> > segfaulting...
> 
> Hm.  But I think we'd *like* it to segfault; the idea is to make the
> user's programming error as obvious as possible.  Is it worth the
> trouble to just zero out the pointer members of the PGresult?

There are only five of them; four need to be zeroed out.


void
PQclear(PGresult *res)
{
    PGresult_data *block;

    if (!res)
        return;
    
    /* Free all the subsidiary blocks */
    while ((block = res->curBlock) != NULL)
    {
        res->curBlock = block->next;
        free(block);
    }

    /* Free the top-level tuple pointer array */
    if (res->tuples)
        free(res->tuples);

    /* zero out the pointer fields to catch programming errors */
    res->attDesc = NULL;
    res->tuples = NULL;
    res->noticeHooks = NULL;
    res->errFields = NULL;
    /* res->curBlock was zeroed out earlier */
    
    /* Free the PGresult structure itself */
    free(res);
}

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

pgsql-hackers by date

Next:From: Tom LaneDate: 2006-05-28 17:07:06
Subject: Re: Error in recent pg_dump change (coverity)
Previous:From: Tom LaneDate: 2006-05-28 16:19:10
Subject: Re: Error in recent pg_dump change (coverity)

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group