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 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
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.
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2006-05-28 17:07:06 | Re: Error in recent pg_dump change (coverity) |
Previous Message | Tom Lane | 2006-05-28 16:19:10 | Re: Error in recent pg_dump change (coverity) |