aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-09-15 17:17:53 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2022-09-15 17:17:53 -0400
commitbff7bc6cb785191041aa7530febdbb5cfe6eaf06 (patch)
treee68b6babd8f6e3e9d0d1fb59adabb98b73e1d757
parentb53d104ae3b9cb0acfc6bb429261005bd07d3b3e (diff)
downloadpostgresql-bff7bc6cb785191041aa7530febdbb5cfe6eaf06.tar.gz
postgresql-bff7bc6cb785191041aa7530febdbb5cfe6eaf06.zip
Detect format-string mistakes in the libpq_pipeline test module.
I happened to notice that libpq_pipeline's private implementation of pg_fatal lacked any pg_attribute_printf decoration. Indeed, adding that turned up a mistake! We'd likely never have noticed because the error exits in this code are unlikely to get hit, but still, it's a bug. We're so used to having the compiler check this stuff for us that a printf-like function without pg_attribute_printf is a land mine. I wonder if there is a way to detect such omissions. Back-patch to v14 where this code came in.
-rw-r--r--src/test/modules/libpq_pipeline/libpq_pipeline.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c
index dfab924965d..9d07681b297 100644
--- a/src/test/modules/libpq_pipeline/libpq_pipeline.c
+++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c
@@ -28,6 +28,8 @@
static void exit_nicely(PGconn *conn);
+static void pg_attribute_noreturn() pg_fatal_impl(int line, const char *fmt,...)
+ pg_attribute_printf(2, 3);
static bool process_result(PGconn *conn, PGresult *res, int results,
int numsent);
@@ -916,7 +918,7 @@ test_prepared(PGconn *conn)
if (PQresultStatus(res) != PGRES_COMMAND_OK)
pg_fatal("expected COMMAND_OK, got %s", PQresStatus(PQresultStatus(res)));
if (PQnfields(res) != lengthof(expected_oids))
- pg_fatal("expected %d columns, got %d",
+ pg_fatal("expected %zd columns, got %d",
lengthof(expected_oids), PQnfields(res));
for (int i = 0; i < PQnfields(res); i++)
{