1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-07 19:06:32 +03:00

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 <tgl@sss.pgh.pa.us>
Backpatch-through: 18
This commit is contained in:
Andres Freund
2025-11-04 19:23:13 -05:00
parent 2d83d729d5
commit dae00f333b

View File

@@ -89,6 +89,9 @@ static const IoMethodOps *const pgaio_method_ops_table[] = {
#endif #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 */ /* callbacks for the configured io_method, set by assign_io_method */
const IoMethodOps *pgaio_method_ops; const IoMethodOps *pgaio_method_ops;
@@ -1318,8 +1321,8 @@ pgaio_shutdown(int code, Datum arg)
void void
assign_io_method(int newval, void *extra) assign_io_method(int newval, void *extra)
{ {
Assert(newval < lengthof(pgaio_method_ops_table));
Assert(pgaio_method_ops_table[newval] != NULL); Assert(pgaio_method_ops_table[newval] != NULL);
Assert(newval < lengthof(io_method_options));
pgaio_method_ops = pgaio_method_ops_table[newval]; pgaio_method_ops = pgaio_method_ops_table[newval];
} }