pg_control_init() bug

Started by Bossart, Nathanabout 6 years ago3 messages
#1Bossart, Nathan
bossartn@amazon.com
1 attachment(s)

Hello,

I noticed that pg_control_init() is failing an assertion on 13devel:

TRAP: FailedAssertion("(atti->attalign) == 's'", File: "heaptuple.c", Line: 160)
postgres: bossartn postgres [local] SELECT(ExceptionalCondition+0x55)[0x8e02b5]
postgres: bossartn postgres [local] SELECT(heap_compute_data_size+0x224)[0x486eb4]
postgres: bossartn postgres [local] SELECT(heap_form_tuple+0x82)[0x488262]
postgres: bossartn postgres [local] SELECT(pg_control_init+0x259)[0x902ca9]
postgres: bossartn postgres [local] SELECT(ExecMakeTableFunctionResult+0x345)[0x656a65]
postgres: bossartn postgres [local] SELECT[0x667e03]
postgres: bossartn postgres [local] SELECT(ExecScan+0x3ab)[0x6572db]
postgres: bossartn postgres [local] SELECT(standard_ExecutorRun+0x137)[0x64f097]
postgres: bossartn postgres [local] SELECT[0x7c5d8b]
postgres: bossartn postgres [local] SELECT(PortalRun+0x1d1)[0x7c71c1]
postgres: bossartn postgres [local] SELECT[0x7c34d1]
postgres: bossartn postgres [local] SELECT(PostgresMain+0x624)[0x7c4aa4]
postgres: bossartn postgres [local] SELECT[0x74109a]
postgres: bossartn postgres [local] SELECT(main+0x440)[0x69f220]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7fbb78309d1d]
postgres: bossartn postgres [local] SELECT[0x47b039]
2019-12-10 20:02:03.100 UTC [20859] LOG: server process (PID 20868) was terminated by signal 6: Aborted
2019-12-10 20:02:03.100 UTC [20859] DETAIL: Failed process was running: SELECT * FROM pg_control_init();
2019-12-10 20:02:03.100 UTC [20859] LOG: terminating any other active server processes

The attached patch seems to clear this up. I think this was missed in
2e4db241.

Nathan

Attachments:

pg_control_init_fix.patchapplication/octet-stream; name=pg_control_init_fix.patchDownload
diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c
index 7007d6503f..0597714f4d 100644
--- a/src/backend/utils/misc/pg_controldata.c
+++ b/src/backend/utils/misc/pg_controldata.c
@@ -275,7 +275,7 @@ pg_control_init(PG_FUNCTION_ARGS)
 	 * Construct a tuple descriptor for the result row.  This must match this
 	 * function's pg_proc entry!
 	 */
-	tupdesc = CreateTemplateTupleDesc(12);
+	tupdesc = CreateTemplateTupleDesc(11);
 	TupleDescInitEntry(tupdesc, (AttrNumber) 1, "max_data_alignment",
 					   INT4OID, -1, 0);
 	TupleDescInitEntry(tupdesc, (AttrNumber) 2, "database_block_size",
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bossart, Nathan (#1)
Re: pg_control_init() bug

"Bossart, Nathan" <bossartn@amazon.com> writes:

I noticed that pg_control_init() is failing an assertion on 13devel:

Hmm, yeah. In a non-assert build I get

regression=# select * from pg_control_init();
ERROR: function return row and query-specified return row do not match
DETAIL: Returned row contains 12 attributes, but query expects 11.

The attached patch seems to clear this up. I think this was missed in
2e4db241.

Evidently. Thanks for the report!

regards, tom lane

#3Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#2)
Re: pg_control_init() bug

On Tue, Dec 10, 2019 at 05:46:48PM -0500, Tom Lane wrote:

"Bossart, Nathan" <bossartn@amazon.com> writes:

I noticed that pg_control_init() is failing an assertion on 13devel:

Hmm, yeah. In a non-assert build I get

regression=# select * from pg_control_init();
ERROR: function return row and query-specified return row do not match
DETAIL: Returned row contains 12 attributes, but query expects 11.

The attached patch seems to clear this up. I think this was missed in
2e4db241.

Evidently. Thanks for the report!

FYI, this has been applied:

Fix tuple column count in pg_control_init().

Oversight in commit 2e4db241b.

Nathan Bossart

Discussion: /messages/by-id/1B616360-396A-4482-AA28-375566C86160@amazon.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8729fa72483f8a9acf299508bb2cbae1aa9a29b8

Modified Files
--------------
src/backend/utils/misc/pg_controldata.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +