From 84e826567cb862e062593280fb13b7fe5d857f0c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Wed, 12 Nov 2025 10:19:17 +0900 Subject: [PATCH] Report better object limits in error messages for injection points Previously, error messages for oversized injection point names, libraries, and functions showed buffer sizes (64, 128, 128) instead of the usable character limits (63, 127, 127) as it did not count for the zero-terminated byte, which was confusing. These messages are adjusted to show better the reality. The limit enforced for the private area was also too strict by one byte, as specifying a zone worth exactly INJ_PRIVATE_MAXLEN should be able to work because three is no zero-terminated byte in this case. This is a stylistic change (well, mostly, a private_area size of exactly 1024 bytes can be defined with this change, something that nobody seem to care about based on the lack of complaints). However, this is a testing facility let's keep the logic consistent across all the branches where this code exists, as there is an argument in favor of out-of-core extensions that use injection points. Author: Xuneng Zhou Co-authored-by: Michael Paquier Discussion: https://postgr.es/m/CABPTF7VxYp4Hny1h+7ejURY-P4O5-K8WZg79Q3GUx13cQ6B2kg@mail.gmail.com Backpatch-through: 17 --- src/backend/utils/misc/injection_point.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/backend/utils/misc/injection_point.c b/src/backend/utils/misc/injection_point.c index f58ebc8ee52..f795fc2563f 100644 --- a/src/backend/utils/misc/injection_point.c +++ b/src/backend/utils/misc/injection_point.c @@ -283,16 +283,16 @@ InjectionPointAttach(const char *name, int free_idx; if (strlen(name) >= INJ_NAME_MAXLEN) - elog(ERROR, "injection point name %s too long (maximum of %u)", - name, INJ_NAME_MAXLEN); + elog(ERROR, "injection point name %s too long (maximum of %u characters)", + name, INJ_NAME_MAXLEN - 1); if (strlen(library) >= INJ_LIB_MAXLEN) - elog(ERROR, "injection point library %s too long (maximum of %u)", - library, INJ_LIB_MAXLEN); + elog(ERROR, "injection point library %s too long (maximum of %u characters)", + library, INJ_LIB_MAXLEN - 1); if (strlen(function) >= INJ_FUNC_MAXLEN) - elog(ERROR, "injection point function %s too long (maximum of %u)", - function, INJ_FUNC_MAXLEN); - if (private_data_size >= INJ_PRIVATE_MAXLEN) - elog(ERROR, "injection point data too long (maximum of %u)", + elog(ERROR, "injection point function %s too long (maximum of %u characters)", + function, INJ_FUNC_MAXLEN - 1); + if (private_data_size > INJ_PRIVATE_MAXLEN) + elog(ERROR, "injection point data too long (maximum of %u bytes)", INJ_PRIVATE_MAXLEN); /* -- 2.39.5