Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vho3p-006Vt1-2t for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 12:08:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vho3o-00D7i5-2H for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Jan 2026 12:08:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vho3o-00D7hw-03 for pgsql-hackers@lists.postgresql.org; Mon, 19 Jan 2026 12:08:44 +0000 Received: from mail-ot1-x32c.google.com ([2607:f8b0:4864:20::32c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vho3l-001EhA-2A for pgsql-hackers@postgresql.org; Mon, 19 Jan 2026 12:08:43 +0000 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-7d122733808so565927a34.2 for ; Mon, 19 Jan 2026 04:08:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768824521; cv=none; d=google.com; s=arc-20240605; b=ErOrmXWtmZblbzxdECEP3U1II1LasOUIYoH8+IPiiGGoCz+lAC/YvA8Y/l9OTQDdm7 vzb0eyJmlsEysUmWevzlu9TztLCdqoO1mvYfT+s2ZlIxGvwRIQoTDnJB7NddC7x7Nstv prYEbHTrEe/Jp8WP5yGOULeqcIeV7gjSBAqHRUSBdBrinWMYf4tU+pW5Ty5maUnT6SnA AFAsYuOqNRCa4YQ4kJhGLe+Em7H969vOAgNDyt/fgrQVzcWsBA3bmjBr3P6AJGVUnann Se948ABxrSQg8+6CEa9fIdzVRXxwQ6kkY+girpQmfMQQizajZA+ufbBbpye6nhicau4v Z3fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=4vH5sa/gh2Ovpn9C6CaV68Pp1zoS0bzn56X5xHQ7eC0=; fh=5VwhhtWqJFExsErfeSjymBCh7C7O6IhMh8tDIpzsl0M=; b=C0fAR55AMJW09TTWDyTCKad0KOUEWu4riHbaJjoK5cxWkaSkS5pBJ/+qtN1qLGHgWB 4H6HB4WbcKKLxt6dn9Y8Fg3HoVUs8EREQi68lTj8607J2q7ITuRQouL2Pul4COgGmiMS 3Wg6P54NOj6HVoQaeHtAjTxF2j8PohN5kS9Lrhvx0chFDW7MbJqkoS+U9D6JyMQiGw5H 9cypEM678OoBX1bNtbgaP14S/8iHjdYoGRAxsNesn9frHVZ6cTC8oeOmg5VwgNSJ01J1 X7nygAMYkJeWt6LKcBnbBzp4GabrIeoHUOOgmuaBKmx9eunAU1do3VtK0GFaw32etIZU yt1w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768824521; x=1769429321; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4vH5sa/gh2Ovpn9C6CaV68Pp1zoS0bzn56X5xHQ7eC0=; b=Psd+EIeW6GPLvoGBRHztG6NelYsCWaBMIxWckwQV1Zzm2trT2g5qdE2ty95jlyjZ3B 6dNa0meryGca/drfRpR92wuc71OYMHogoix5tZqBXKl7UiXqYH+FZbJM2ylyjey2/Wqa P5ddOPArQSzQoZwprFAvCrWH9xvpA3YvQKmjQ7d74Kd31xxcdABTsu+wg0ciwvuXOxc4 zUvHDm6gk/zUYvbhIlQlvp9RezvT/SHEWTlexKUxsVVPHVL4tC0AV4TZisHqDjAo4Cb7 3spI85mhQ1+Oi8dTb10IkcFdmPg29U7rImToWcEaQVuWxdwVeHmFWstgV/czjq10e7wu uhWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768824521; x=1769429321; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=4vH5sa/gh2Ovpn9C6CaV68Pp1zoS0bzn56X5xHQ7eC0=; b=B150WY2nqJZYtdD/pkJK0WdwtS2DKhS3CBkm+zLCbgzKjpo9MMmZELxIcddCCl59YZ YYVrzc7P4Hy85AVJCNwAHTOkOyVVgbQgMpkeSYQjqjXufJcZ0iINY+8P+fV8mh3Pf9vq Tub64v9H+oWnh3RwKeV9ApYepWynD2vo0rgoSyySLdAmy6DZlULcHeQw5UG/oszD5sMf VXZFiRtIBhtXFpQo7C95BA3NVoWitmySuH7Is5NmYgW3a3eXMurfrNAyEUipXEVL86v8 QGFke5GfAUKGmhc6IO8AawQaw44Phqt9wKcWkCk1mYJKmLg88aMB+5HKrujS0q6/Mcc8 kuRw== X-Forwarded-Encrypted: i=1; AJvYcCUxXlNAIKYFKps/hSt+P9RJynWtaQHCJ1MMoPOXfZ9Om5b/349HIzl5IR2JRCJdUCQEBcjTIXlr2+x3H1LP@postgresql.org X-Gm-Message-State: AOJu0YxLoTlIbYsgYoBfzrYKCJzO7UO+Kgbemlzddb60uDos+voTaq6N EcNq/U1SHE/F2xcC/zeqgPcfOwPax7QfMgFjfsjJAVhLucV7z6tjm8jbIZYV7+5RA2cP4J2A22S JqZLzZfQXzrDRyhjC6qtFl+aD5smYkK0bcOZo X-Gm-Gg: AY/fxX4T41wk5zGTq1Pnj04OhQXbpciaWaQrKpuKI4ROj2MTZUjlLgyE+yyLi1vqydq Q9ME7BZNorlsPLc8tWy0jy+UdzgQhbQZqgQ2F+Z+aAH9D2P4eteRNlG/YxphfNBteQIyO4FL3yS ip2IvIT6xLK5FmJuSyVKNRvImbA4At3p+yEK571ZNylf4vMEo+wtEskGE4UAQvH7mnWy935bj1u kvQCtGjUrMtCRPBxP5MBnN2DVYUbIgSBiD4fr+k2GkI5ehT46lqQrE2nkaSRycpOIpw5kka X-Received: by 2002:a05:6830:6586:b0:7c7:e3b:488a with SMTP id 46e09a7af769-7cfe024e628mr4229764a34.30.1768824521096; Mon, 19 Jan 2026 04:08:41 -0800 (PST) MIME-Version: 1.0 References: <3007317.1765210195@sss.pgh.pa.us> In-Reply-To: From: Shruthi Gowda Date: Mon, 19 Jan 2026 17:38:29 +0530 X-Gm-Features: AZwV_Qhxzthv2WlVNn1KIZk0U5EBB0W8K-8reNmf0JVnMuaOq9alChy0-CGj8lQ Message-ID: Subject: Re: [BUG] CRASH: ECPGprepared_statement() and ECPGdeallocate_all() when connection is NULL To: Fujii Masao Cc: Tom Lane , PostgreSQL Development Content-Type: multipart/mixed; boundary="0000000000004018ce0648bc8d66" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004018ce0648bc8d66 Content-Type: multipart/alternative; boundary="0000000000004018cd0648bc8d64" --0000000000004018cd0648bc8d64 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jan 8, 2026 at 9:32=E2=80=AFPM Fujii Masao = wrote: > On Thu, Jan 8, 2026 at 3:00=E2=80=AFAM Shruthi Gowda wrote: > > > > > > On Mon, Dec 8, 2025 at 9:39=E2=80=AFPM Tom Lane wro= te: > >> > >> Shruthi Gowda writes: > >> > The ECPG application crashes with a segmentation fault when calling > >> > specific deallocation or prepared statement functions without an > >> > established database connection. This is caused by a missing NULL > check on > >> > the connection handle before attempting to access it. > >> > >> Hmm ... poking around, I see several other places that aren't checking > >> the result of ecpg_get_connection. Shouldn't we tighten them all? > >> > >> regards, tom lane > > > > > > I agree. I=E2=80=99ve reviewed all occurrences of ecpg_get_connection()= and > noted that, in most instances, it is followed by ecpg_init(), which > validates the connection and returns immediately if the connection is NUL= L. > > Why did you add this check instead of calling ecpg_init()? > Wouldn't it be better and sufficient to use ecpg_init() to validate > the connection? > > + con =3D ecpg_get_connection(connection_name); > + if (!con) > + { > + ecpg_raise(lineno, ECPG_NO_CONN, ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIS= T, > + connection_name ? connection_name : ecpg_gettext("NULL")); > > Thanks for the feedback, Fujii. I agree=E2=80=94using ecpg_init() is a mor= e consistent approach and aligns with how this is handled in other parts of the code. I have updated the patch to use ecpg_init() for validation. Please find the revised version attached. The patch works for MASTER and all the back branches. Thanks & Regards, Shruthi K C EnterpriseDB: http://www.enterprisedb.com --0000000000004018cd0648bc8d64 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Thu, Jan 8, 2026 at 9:32=E2=80=AFPM Fujii Masao <masao.fujii@gmail.com> wro= te:
On Thu, Jan = 8, 2026 at 3:00=E2=80=AFAM Shruthi Gowda <gowdashru@gmail.com> wrote:
>
>
> On Mon, Dec 8, 2025 at 9:39=E2=80=AFPM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>>
>> Shruthi Gowda <gowdashru@gmail.com> writes:
>> > The ECPG application crashes with a segmentation fault when c= alling
>> > specific deallocation or prepared statement functions without= an
>> > established database connection. This is caused by a missing = NULL check on
>> > the connection handle before attempting to access it.
>>
>> Hmm ... poking around, I see several other places that aren't = checking
>> the result of ecpg_get_connection.=C2=A0 Shouldn't we tighten = them all?
>>
>>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0regards, tom lane
>
>
> I agree. I=E2=80=99ve reviewed all occurrences of ecpg_get_connection(= ) and noted that, in most instances, it is followed by ecpg_init(), which v= alidates the connection and returns immediately if the connection is NULL.<= br>
Why did you add this check instead of calling ecpg_init()?
Wouldn't it be better and sufficient to use ecpg_init() to validate
the connection?

+ con =3D ecpg_get_connection(connection_name);
+ if (!con)
+ {
+ ecpg_raise(lineno, ECPG_NO_CONN, ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST,=
+=C2=A0 =C2=A0 connection_name ? connection_name : ecpg_gettext("NULL&= quot;));


=C2=A0Thanks for the feedb= ack, Fujii. I agree=E2=80=94using ecpg_init() is a more consis= tent approach and aligns with how this is handled in other parts of the cod= e.=C2=A0
I have updated the patch to use ecpg_init()= for validation. Please find the revised version attached.
The pa= tch works for MASTER and all the back branches.=C2=A0

<= div>

Thanks & Regards,

Shruthi K C

EnterpriseDB:=C2=A0http://www.enterprisedb.com

--0000000000004018cd0648bc8d64-- --0000000000004018ce0648bc8d66 Content-Type: application/octet-stream; name="v3-0001-Add-missing-connection-validation-in-ECPG.patch" Content-Disposition: attachment; filename="v3-0001-Add-missing-connection-validation-in-ECPG.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkl4dctu0 RnJvbSAzMjY3YTRkYThkNDE3NjFhNmRkYjE4ODBlNTdkYmZiMTA5YTNlZWIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBzaHJ1dGhpIGdvd2RhIDxzaHJ1dGhpLmtjQGVudGVycHJpc2Vk Yi5jb20+CkRhdGU6IE1vbiwgMTkgSmFuIDIwMjYgMTA6MzI6MjMgKzAwMDAKU3ViamVjdDogW1BB VENIIHYzXSBBZGQgbWlzc2luZyBjb25uZWN0aW9uIHZhbGlkYXRpb24gaW4gRUNQRwoKRW5zdXJl IHRoYXQgRUNQRyBjb25uZWN0aW9ucyBhcmUgdmFsaWRhdGVkIGJlZm9yZSB1c2UgdG8gcHJldmVu dAphcHBsaWNhdGlvbiBjcmFzaGVzLiBUaGlzIGFsbG93cyB0aGUgc3lzdGVtIHRvIGhhbmRsZSBk aXNjb25uZWN0ZWQKc3RhdGVzIGdyYWNlZnVsbHkgYnkgdGhyb3dpbmcgYSBwcm9wZXIgZXJyb3Ig aW5zdGVhZCBvZgpzZWdmYXVsdGluZy4KLS0tCiBzcmMvaW50ZXJmYWNlcy9lY3BnL2VjcGdsaWIv ZGVzY3JpcHRvci5jIHwgIDkgKysrKysrKy0tCiBzcmMvaW50ZXJmYWNlcy9lY3BnL2VjcGdsaWIv cHJlcGFyZS5jICAgIHwgMTcgKysrKysrKysrKysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjAg aW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNl cy9lY3BnL2VjcGdsaWIvZGVzY3JpcHRvci5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3BnbGli L2Rlc2NyaXB0b3IuYwppbmRleCAzOWNkNTEzMGVjOS4uMTI4ZmRkZDE2N2MgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2VjcGcvZWNwZ2xpYi9kZXNjcmlwdG9yLmMKKysrIGIvc3JjL2ludGVy ZmFjZXMvZWNwZy9lY3BnbGliL2Rlc2NyaXB0b3IuYwpAQCAtMjM1LDYgKzIzNSw3IEBAIEVDUEdn ZXRfZGVzYyhpbnQgbGluZW5vLCBjb25zdCBjaGFyICpkZXNjX25hbWUsIGludCBpbmRleCwuLi4p CiB7CiAJdmFfbGlzdAkJYXJnczsKIAlQR3Jlc3VsdCAgICpFQ1BHcmVzdWx0OworCXN0cnVjdCBj b25uZWN0aW9uICpjb247CiAJZW51bSBFQ1BHZHR5cGUgdHlwZTsKIAlpbnQJCQludHVwbGVzLAog CQkJCWFjdF90dXBsZTsKQEAgLTI0OSw4ICsyNTAsMTIgQEAgRUNQR2dldF9kZXNjKGludCBsaW5l bm8sIGNvbnN0IGNoYXIgKmRlc2NfbmFtZSwgaW50IGluZGV4LC4uLikKIAkJcmV0dXJuIGZhbHNl OwogCX0KIAorCWNvbiA9IGVjcGdfZ2V0X2Nvbm5lY3Rpb24oTlVMTCk7CisJaWYgKCFlY3BnX2lu aXQoY29uLCBOVUxMLCBsaW5lbm8pKQorCQlyZXR1cm4gZmFsc2U7CisKIAl2YV9zdGFydChhcmdz LCBpbmRleCk7Ci0JZWNwZ19pbml0X3NxbGNhKHNxbGNhKTsKKwogCUVDUEdyZXN1bHQgPSBlY3Bn X3Jlc3VsdF9ieV9kZXNjcmlwdG9yKGxpbmVubywgZGVzY19uYW1lKTsKIAlpZiAoIUVDUEdyZXN1 bHQpCiAJewpAQCAtNTA2LDcgKzUxMSw3IEBAIEVDUEdnZXRfZGVzYyhpbnQgbGluZW5vLCBjb25z dCBjaGFyICpkZXNjX25hbWUsIGludCBpbmRleCwuLi4pCiAjZW5kaWYKIAogCQkvKiBkZXNwZXJh dGUgdHJ5IHRvIGd1ZXNzIHNvbWV0aGluZyBzZW5zaWJsZSAqLwotCQlzdG10LmNvbm5lY3Rpb24g PSBlY3BnX2dldF9jb25uZWN0aW9uKE5VTEwpOworCQlzdG10LmNvbm5lY3Rpb24gPSBjb247CiAJ CWVjcGdfc3RvcmVfcmVzdWx0KEVDUEdyZXN1bHQsIGluZGV4LCAmc3RtdCwgJmRhdGFfdmFyKTsK IAogI2lmZGVmIEhBVkVfVVNFTE9DQUxFCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3Bn L2VjcGdsaWIvcHJlcGFyZS5jIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3BnbGliL3ByZXBhcmUu YwppbmRleCA1YzdjNTM5NzUzNS4uNmJjZDM0Y2RmODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZh Y2VzL2VjcGcvZWNwZ2xpYi9wcmVwYXJlLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9lY3Bn bGliL3ByZXBhcmUuYwpAQCAtMzgxLDggKzM4MSwxMyBAQCBlY3BnX2RlYWxsb2NhdGVfYWxsX2Nv bm4oaW50IGxpbmVubywgZW51bSBDT01QQVRfTU9ERSBjLCBzdHJ1Y3QgY29ubmVjdGlvbiAqY29u KQogYm9vbAogRUNQR2RlYWxsb2NhdGVfYWxsKGludCBsaW5lbm8sIGludCBjb21wYXQsIGNvbnN0 IGNoYXIgKmNvbm5lY3Rpb25fbmFtZSkKIHsKLQlyZXR1cm4gZWNwZ19kZWFsbG9jYXRlX2FsbF9j b25uKGxpbmVubywgY29tcGF0LAotCQkJCQkJCQkJZWNwZ19nZXRfY29ubmVjdGlvbihjb25uZWN0 aW9uX25hbWUpKTsKKwlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCisJY29uID0gZWNwZ19nZXRf Y29ubmVjdGlvbihjb25uZWN0aW9uX25hbWUpOworCWlmICghZWNwZ19pbml0KGNvbiwgY29ubmVj dGlvbl9uYW1lLCBsaW5lbm8pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gZWNwZ19kZWFs bG9jYXRlX2FsbF9jb25uKGxpbmVubywgY29tcGF0LCBjb24pOwogfQogCiBjaGFyICoKQEAgLTM5 OSw5ICs0MDQsMTMgQEAgZWNwZ19wcmVwYXJlZChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY29u bmVjdGlvbiAqY29uKQogY2hhciAqCiBFQ1BHcHJlcGFyZWRfc3RhdGVtZW50KGNvbnN0IGNoYXIg KmNvbm5lY3Rpb25fbmFtZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxpbmVubykKIHsKLQkodm9p ZCkgbGluZW5vOwkJCQkvKiBrZWVwIHRoZSBjb21waWxlciBxdWlldCAqLworCXN0cnVjdCBjb25u ZWN0aW9uICpjb247CisKKwljb24gPSBlY3BnX2dldF9jb25uZWN0aW9uKGNvbm5lY3Rpb25fbmFt ZSk7CisJaWYgKCFlY3BnX2luaXQoY29uLCBjb25uZWN0aW9uX25hbWUsIGxpbmVubykpCisJCXJl dHVybiBmYWxzZTsKIAotCXJldHVybiBlY3BnX3ByZXBhcmVkKG5hbWUsIGVjcGdfZ2V0X2Nvbm5l Y3Rpb24oY29ubmVjdGlvbl9uYW1lKSk7CisJcmV0dXJuIGVjcGdfcHJlcGFyZWQobmFtZSwgY29u KTsKIH0KIAogLyoKLS0gCjIuNDMuMAoK --0000000000004018ce0648bc8d66--