Re: Use of uninitialized variables in ExecFindPartition() for parent partition without leaves (HEAD only)
Amit Langote <langote_amit_f8@lab.ntt.co.jp>
From: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
To: Michael Paquier <michael.paquier@gmail.com>,
PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Cc: Amit Langote <amitlangote09@gmail.com>,
Robert Haas <robertmhaas@gmail.com>
Date: 2017-11-30T01:11:09Z
Lists: pgsql-hackers
Attachments
- exec-partition-quickexit-v2.patch (text/plain) patch v2
Hi Michael. On 2017/11/30 9:07, Michael Paquier wrote: > Hi all, > > Since commit 4e5fe9ad (committer Robert Haas and author Amit Langote), > coverity has been complaining that the new code of ExecFindPartition() > may use a set of values and isnull values which never get initialized. > This is a state which can be easily reached with the following SQLs of > a parent partition with no children: > create table parent_tab (a int) partition by list ((a+0)); > insert into parent_tab values (1); > > The mistake is visibly that FormPartitionKeyDatum() should be called > even for a root partition, initializing the fields of isnull and > values on the way. That's actually what happens in execMain.c's > ExecFindPartition() if you look at REL_10_STABLE. So the answer would > be to move a bit down the quick exit code. Attached is a patch. > > Amit, that's your code. What do you think? Thanks for the report. That's clearly a bug. :-( Your patch seems enough to fix it. I added a test and expanded the comment a bit in the attached updated version. Thanks, Amit
Commits
-
Fix uninitialized memory reference.
- 59c8078744b5 11.0 landed
-
Centralize executor-related partitioning code.
- 4e5fe9ad19e1 11.0 cited