Re: [BUG] CRASH: ECPGprepared_statement() and ECPGdeallocate_all() when connection is NULL

Nishant Sharma <nishant.sharma@enterprisedb.com>

From: Nishant Sharma <nishant.sharma@enterprisedb.com>
To: Mahendra Singh Thalor <mahi6run@gmail.com>
Cc: Shruthi Gowda <gowdashru@gmail.com>, Fujii Masao <masao.fujii@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL Development <pgsql-hackers@postgresql.org>
Date: 2026-03-24T05:59:31Z
Lists: pgsql-hackers
Here are some review comments on v3 patch:-

   1.

   Change in descriptor.c file - In my opinion, we can use `if(conn)` with
   ecpg_raise, like other occurrence of ecpg_get_connection() call check in
   this file, and not using ecpg_init(). Three reasons: a) Consistency in
   checking conn after ecpg_get_connection() call in this file with if check.
   b) We don't need to remove 'ecpg_init_sqlca(sqlca);' line due to call to
   ecpg_init(). c) #2 comment below.
   2.

   If you agree with #1, then I see many other reasons for which
   ECPGget_desc() returns and we can avoid ecpg_get_connection() call at top
   of that function for those reasons and keep the check at the required
   location only instead of moving at top of the function.
   3.

   I see there is one more location of ecpg_get_connection() call where
   there is no check of NULL conn. In function ecpg_freeStmtCacheEntry() of
   file prepare.c? I understand it's not required for a call in
   ecpg_auto_prepare(), as the caller already validated that connection
   string. But I think, conn in ecpg_freeStmtCacheEntry() is different from
   the one that was validated.
   4.

   +1 to Mahindra, new test cases specific to the crash required for this
   change?



Regards,
Nishant Sharma,
EDB, Pune.
https://www.enterprisedb.com/

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Add missing connection validation in ECPG