From 6a1a2b8458f1818edab4cfc39d72bb6d0d4c87c2 Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Thu, 20 Dec 2018 10:21:19 +0100 Subject: [PATCH] Move an assert-only array-bound check to run-time. When the bound-check fails at run-time, better abort with an error message rather than trying to user memory we did not allocate. --- .../distributed/connection/connection_configuration.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/connection/connection_configuration.c b/src/backend/distributed/connection/connection_configuration.c index 5edcf35fb..a689a6a92 100644 --- a/src/backend/distributed/connection/connection_configuration.c +++ b/src/backend/distributed/connection/connection_configuration.c @@ -100,7 +100,12 @@ ResetConnParams() void AddConnParam(const char *keyword, const char *value) { - Assert((ConnParams.size + 1) < ConnParams.maxSize); + if (ConnParams.size + 1 >= ConnParams.maxSize) + { + /* we expect developers to see that error messages */ + ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_RESOURCES), + errmsg("ConnParams arrays bound check failed"))); + } ConnParams.keywords[ConnParams.size] = strdup(keyword); ConnParams.values[ConnParams.size] = strdup(value); @@ -263,7 +268,7 @@ GetConnParams(ConnectionHashKey *key, char ***keywords, char ***values, int paramIndex = 0; int runtimeParamIndex = 0; - if (ConnParams.size + lengthof(runtimeKeywords) > ConnParams.maxSize) + if (ConnParams.size + lengthof(runtimeKeywords) >= ConnParams.maxSize) { /* unexpected, intended as developers rather than users */ ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE),