From dae00f333bdd98d094275080dba248cc80d4ca04 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 4 Nov 2025 19:23:13 -0500 Subject: aio: Improve assertions related to io_method First, the assertions in assign_io_method() were the wrong way round. Second, the lengthof() assertion checked the length of io_method_options, which is the wrong array to check and is always longer than pgaio_method_ops_table. While add it, add a static assert to ensure pgaio_method_ops_table and io_method_options stay in sync. Per coverity and Tom Lane. Reported-by: Tom Lane Backpatch-through: 18 --- src/backend/storage/aio/aio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/backend/storage/aio/aio.c b/src/backend/storage/aio/aio.c index 87d7136a936..dcc47069757 100644 --- a/src/backend/storage/aio/aio.c +++ b/src/backend/storage/aio/aio.c @@ -89,6 +89,9 @@ static const IoMethodOps *const pgaio_method_ops_table[] = { #endif }; +StaticAssertDecl(lengthof(io_method_options) == lengthof(pgaio_method_ops_table) + 1, + "io_method_options out of sync with pgaio_method_ops_table"); + /* callbacks for the configured io_method, set by assign_io_method */ const IoMethodOps *pgaio_method_ops; @@ -1318,8 +1321,8 @@ pgaio_shutdown(int code, Datum arg) void assign_io_method(int newval, void *extra) { + Assert(newval < lengthof(pgaio_method_ops_table)); Assert(pgaio_method_ops_table[newval] != NULL); - Assert(newval < lengthof(io_method_options)); pgaio_method_ops = pgaio_method_ops_table[newval]; } -- cgit v1.2.3