From: | Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Possible NULL dereferencing (src/backend/tcop/pquery.c) |
Date: | 2020-06-26 23:07:42 |
Message-ID: | CAEudQAonXxZ9jb4z-utNcDxsr8d4qmkTLMmYCz9r9DBEaJX5ww@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Em sex., 26 de jun. de 2020 às 18:24, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> escreveu:
> Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> writes:
> > 1.Assertion check
> > /* Caller messed up if we have neither a ready query nor held data. */
> > Assert(queryDesc || portal->holdStore);
>
> > But in release, if QueryDesc is NULL and portal->holdStore is NULL too,
> > when Call PushActiveSnapshot *deference* NULL check can happen.
>
> > 2. if (portal->atEnd || count <= 0) is True
> > No need to recheck count against FETCH_ALL.
>
> > Is it worth correcting them?
>
> No.
>
> The assertion already says that that's a case that cannot happen.
> Or to look at it another way: if the case were to occur in a devel
> build, you'd get a core dump at the assertion. If the case were
> to occur in a production build, you'd get a core dump at the
> dereference. Not much difference. Either way, it's a *caller*
> bug, because the caller is supposed to make sure this cannot happen.
> If we thought that it could possibly happen, we would use an ereport
> but not an assertion; having both for the same condition is quite
> misguided.
>
Ok, thats a job of Assertion.
But I still worry that, in some rare cases, portal-> holdStore might be
corrupted in some way
and the function is called, causing a segmentation fault.
>
> (If Coverity is whining about this for you, there's something wrong
> with your Coverity settings. In the project's instance, Coverity
> accepts assertions as assertions.)
>
Probable, because reports this:
CID 10127 (#2 of 2): Dereference after null check (FORWARD_NULL)8.
var_deref_op: Dereferencing null pointer queryDesc.
>
> I'm unimpressed with the other proposed change too; it's making the logic
> more complicated and fragile for a completely negligible "performance
> gain". Moreover the compiler could probably make the same optimization.
>
Ok.
Anyway, thank you for by responding, your observations are always valuable
and help learn "the postgres way" to develop.
It's not easy.
best regards,
Ranier Vilela
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2020-06-26 23:41:01 | Re: Default setting for enable_hashagg_disk |
Previous Message | Peter Geoghegan | 2020-06-26 23:00:28 | Re: xid wraparound danger due to INDEX_CLEANUP false |