Thread
Commits
-
Initialize t_self and t_tableOid in statext_expressions_load
- 20661c15db8f 14.0 landed
-
Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Ranier Vilela <ranier.vf@gmail.com> — 2021-04-11T18:38:10Z
Hi, Per Coverity. It seems to me that some recent commit has failed to properly initialize a structure, in extended_stats.c, when is passed to heap_copytuple. regards, Ranier Vilela
-
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Justin Pryzby <pryzby@telsasoft.com> — 2021-04-11T19:25:12Z
On Sun, Apr 11, 2021 at 03:38:10PM -0300, Ranier Vilela wrote: > Per Coverity. > > It seems to me that some recent commit has failed to properly initialize a > structure, in extended_stats.c, when is passed to heap_copytuple. I think you're right. You can look in the commit history to find the relevant commit and copy the committer. I think it's cleanest to write: |HeapTupleData tmptup = {0}; -- Justin -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Ranier Vilela <ranier.vf@gmail.com> — 2021-04-11T22:42:20Z
Hi Justin, sorry for the delay. Nothing against it, but I looked for similar codes and this is the usual way to initialize HeapTupleData. Perhaps InvalidOid makes a difference. regards, Ranier Vilela Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby <pryzby@telsasoft.com> escreveu: > On Sun, Apr 11, 2021 at 03:38:10PM -0300, Ranier Vilela wrote: > > Per Coverity. > > > > It seems to me that some recent commit has failed to properly initialize > a > > structure, in extended_stats.c, when is passed to heap_copytuple. > > I think you're right. You can look in the commit history to find the > relevant > commit and copy the committer. > > I think it's cleanest to write: > |HeapTupleData tmptup = {0}; > > -- > Justin > -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Michael Paquier <michael@paquier.xyz> — 2021-04-12T05:07:30Z
On Sun, Apr 11, 2021 at 07:42:20PM -0300, Ranier Vilela wrote: > Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby <pryzby@telsasoft.com> > escreveu: >> I think you're right. You can look in the commit history to find the >> relevant >> commit and copy the committer. In this case that's a4d75c8, for Tomas. >> I think it's cleanest to write: >> |HeapTupleData tmptup = {0}; I agree that this would be cleaner. While on it, if you could not top-post.. -- Michael -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Tom Lane <tgl@sss.pgh.pa.us> — 2021-04-12T06:04:13Z
Michael Paquier <michael@paquier.xyz> writes: > On Sun, Apr 11, 2021 at 07:42:20PM -0300, Ranier Vilela wrote: >> Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby <pryzby@telsasoft.com> >>> I think it's cleanest to write: >>> |HeapTupleData tmptup = {0}; > I agree that this would be cleaner. It would be wrong, though, or at least not have the same effect. ItemPointerSetInvalid does not set the target to all-zeroes. (Regardless of that detail, it's generally best to accomplish objective X in the same way that existing code does. Deciding that you have a better way is often wrong, and even if you are right, you should then submit a patch to change all the existing cases.) regards, tom lane -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Ranier Vilela <ranier.vf@gmail.com> — 2021-04-12T16:55:13Z
Em seg., 12 de abr. de 2021 às 03:04, Tom Lane <tgl@sss.pgh.pa.us> escreveu: > Michael Paquier <michael@paquier.xyz> writes: > > On Sun, Apr 11, 2021 at 07:42:20PM -0300, Ranier Vilela wrote: > >> Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby < > pryzby@telsasoft.com> > >>> I think it's cleanest to write: > >>> |HeapTupleData tmptup = {0}; > > > I agree that this would be cleaner. > > It would be wrong, though, or at least not have the same effect. > I think that you speak about fill pointers with 0 is not the same as fill pointers with NULL. > ItemPointerSetInvalid does not set the target to all-zeroes. > ItemPointerSetInvalid set or not set the target to all-zeroes? > (Regardless of that detail, it's generally best to accomplish > objective X in the same way that existing code does. Deciding > that you have a better way is often wrong, and even if you > are right, you should then submit a patch to change all the > existing cases.) > I was confused here, does the patch follow the pattern and fix the problem or not? regards, Ranier Vilela -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Tomas Vondra <tomas.vondra@enterprisedb.com> — 2021-04-12T17:03:11Z
On 4/12/21 6:55 PM, Ranier Vilela wrote: > > > Em seg., 12 de abr. de 2021 às 03:04, Tom Lane <tgl@sss.pgh.pa.us > <mailto:tgl@sss.pgh.pa.us>> escreveu: > > Michael Paquier <michael@paquier.xyz <mailto:michael@paquier.xyz>> > writes: > > On Sun, Apr 11, 2021 at 07:42:20PM -0300, Ranier Vilela wrote: > >> Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby > <pryzby@telsasoft.com <mailto:pryzby@telsasoft.com>> > >>> I think it's cleanest to write: > >>> |HeapTupleData tmptup = {0}; > > > I agree that this would be cleaner. > > It would be wrong, though, or at least not have the same effect. > > I think that you speak about fill pointers with 0 is not the same as > fill pointers with NULL. > > > ItemPointerSetInvalid does not set the target to all-zeroes. > > ItemPointerSetInvalid set or not set the target to all-zeroes? > Not sure what exactly are you asking about? What Tom said is that if you do 'struct = {0}' it sets all fields to 0, but we only want/need to set the t_self/t_tableOid fields to 0. > > (Regardless of that detail, it's generally best to accomplish > objective X in the same way that existing code does. Deciding > that you have a better way is often wrong, and even if you > are right, you should then submit a patch to change all the > existing cases.) > > I was confused here, does the patch follow the pattern and fix the > problem or not? > I believe it does, and it's doing it in the same way as most other similar places. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Tom Lane <tgl@sss.pgh.pa.us> — 2021-04-12T17:04:24Z
Ranier Vilela <ranier.vf@gmail.com> writes: > Em seg., 12 de abr. de 2021 às 03:04, Tom Lane <tgl@sss.pgh.pa.us> escreveu: >> It would be wrong, though, or at least not have the same effect. > I think that you speak about fill pointers with 0 is not the same as fill > pointers with NULL. No, I mean that InvalidBlockNumber isn't 0. > I was confused here, does the patch follow the pattern and fix the problem > or not? Your patch seems fine. Justin's proposed improvement isn't. (I'm not real sure whether there's any *actual* bug here --- would we really be looking at either ctid or tableoid of this temporary tuple? But it's probably best to ensure that they're valid anyway.) regards, tom lane
-
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Justin Pryzby <pryzby@telsasoft.com> — 2021-04-12T17:05:53Z
On Mon, Apr 12, 2021 at 01:55:13PM -0300, Ranier Vilela wrote: > Em seg., 12 de abr. de 2021 às 03:04, Tom Lane <tgl@sss.pgh.pa.us> escreveu: > > Michael Paquier <michael@paquier.xyz> writes: > > > On Sun, Apr 11, 2021 at 07:42:20PM -0300, Ranier Vilela wrote: > > >> Em dom., 11 de abr. de 2021 às 16:25, Justin Pryzby < > > pryzby@telsasoft.com> > > >>> I think it's cleanest to write: > > >>> |HeapTupleData tmptup = {0}; > > > > > I agree that this would be cleaner. > > > > It would be wrong, though, or at least not have the same effect. > > > I think that you speak about fill pointers with 0 is not the same as fill > pointers with NULL. > > > > ItemPointerSetInvalid does not set the target to all-zeroes. > > > ItemPointerSetInvalid set or not set the target to all-zeroes? I think Tom means that it does: BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), (pointer)->ip_posid = InvalidOffsetNumber but it's not zero, as I thought: src/include/storage/block.h:#define InvalidBlockNumber ((BlockNumber) 0xFFFFFFFF) > > (Regardless of that detail, it's generally best to accomplish > > objective X in the same way that existing code does. Deciding > > that you have a better way is often wrong, and even if you > > are right, you should then submit a patch to change all the > > existing cases.) FYI, I'd gotten the idea from here: $ git grep 'HeapTupleData.*=' src/backend/executor/execTuples.c: HeapTupleData tuple = {0}; -- Justin -
Re: Uninitialized scalar variable (UNINIT) (src/backend/statistics/extended_stats.c)
Tomas Vondra <tomas.vondra@enterprisedb.com> — 2021-04-13T22:55:55Z
On 4/12/21 7:04 PM, Tom Lane wrote: > Ranier Vilela <ranier.vf@gmail.com> writes: >> Em seg., 12 de abr. de 2021 às 03:04, Tom Lane <tgl@sss.pgh.pa.us> escreveu: >>> It would be wrong, though, or at least not have the same effect. > >> I think that you speak about fill pointers with 0 is not the same as fill >> pointers with NULL. > > No, I mean that InvalidBlockNumber isn't 0. > >> I was confused here, does the patch follow the pattern and fix the problem >> or not? > > Your patch seems fine. Justin's proposed improvement isn't. > Pushed. > (I'm not real sure whether there's any *actual* bug here --- would we > really be looking at either ctid or tableoid of this temporary tuple? > But it's probably best to ensure that they're valid anyway.)> Yeah, the tuple is only built so that we can pass it to the various selectivity estimators. I don't think anything will be actually looking at those fields, but initializing them seems easy enough. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company