From 2f57007f201c5c65b21d3bab866c7488c966a494 Mon Sep 17 00:00:00 2001 From: shruthi gowda Date: Mon, 8 Dec 2025 15:20:08 +0000 Subject: [PATCH v1] Fix: Add connection validation to ECPGdeallocate_all() and ECPGprepared_statement() This commit adds the required connection validation at the start of these functions to ensure they handle a disconnected state gracefully without crashing the application. --- src/interfaces/ecpg/ecpglib/prepare.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/interfaces/ecpg/ecpglib/prepare.c b/src/interfaces/ecpg/ecpglib/prepare.c index 5c7c5397535..96be4396415 100644 --- a/src/interfaces/ecpg/ecpglib/prepare.c +++ b/src/interfaces/ecpg/ecpglib/prepare.c @@ -381,8 +381,16 @@ ecpg_deallocate_all_conn(int lineno, enum COMPAT_MODE c, struct connection *con) bool ECPGdeallocate_all(int lineno, int compat, const char *connection_name) { - return ecpg_deallocate_all_conn(lineno, compat, - ecpg_get_connection(connection_name)); + struct connection *con; + + con = ecpg_get_connection(connection_name); + if (!con) + { + ecpg_raise(lineno, ECPG_NO_CONN, ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST, + connection_name ? connection_name : ecpg_gettext("NULL")); + return false; + } + return ecpg_deallocate_all_conn(lineno, compat, con); } char * @@ -399,9 +407,17 @@ ecpg_prepared(const char *name, struct connection *con) char * ECPGprepared_statement(const char *connection_name, const char *name, int lineno) { - (void) lineno; /* keep the compiler quiet */ + struct connection *con; + + con = ecpg_get_connection(connection_name); + if (!con) + { + ecpg_raise(lineno, ECPG_NO_CONN, ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST, + connection_name ? connection_name : ecpg_gettext("NULL")); + return NULL; + } - return ecpg_prepared(name, ecpg_get_connection(connection_name)); + return ecpg_prepared(name, con); } /* -- 2.43.0