Re: BUG #17880: Uninitialised value used when analyzing a table with an inheritance tree containing no children
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: exclusion@gmail.com
Cc: pgsql-bugs@lists.postgresql.org
Date: 2023-03-31T13:40:35Z
Lists: pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> writes: > As I can see, this error is explained by the fact that > acquire_inherited_sample_rows() can exit before setting > *totalrows = 0; > *totaldeadrows = 0; > so variables declared in do_analyze_rel() as > double totalrows, > totaldeadrows; > stay uninitialised and totalrows passed to vac_update_relstats() where it > triggers the valgrind complaint. Good catch! > On a quick glance, the peer functions acquire_sample_rows(), > postgresAcquireSampleRowsFunc(), file_acquire_sample_rows() can't exit > without setting totalrows/totaldeadrows, so maybe > acquire_inherited_sample_rows() deserves fixing (or maybe those variables > can be initialized in do_analyze_rel()). Yeah, I'd put the blame on acquire_inherited_sample_rows. Its head comment says it has the same API as acquire_sample_rows, and that one's comment says that totalrows/totaldeadrows are always set. Will fix, thanks. regards, tom lane
Commits
-
Ensure acquire_inherited_sample_rows sets its output parameters.
- e46a309bd8b2 11.20 landed
- d0d92fe3d499 12.15 landed
- c2d7d679c122 16.0 landed
- 6f7ca625b9d3 15.3 landed
- 65266d90f85c 13.11 landed
- 2dcd92e97dfa 14.8 landed