Re: Missing NULL check after calling ecpg_strdup
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Aleksander Alekseev <aleksander@tigerdata.com>
Cc: pgsql-hackers@lists.postgresql.org, Evgeniy Gorbanev <gorbanyoves@basealt.ru>
Date: 2025-07-17T06:42:11Z
Lists: pgsql-hackers
On Wed, Jul 16, 2025 at 02:04:12PM +0300, Aleksander Alekseev wrote: > Hi Michael, > > > depending on what's set in a URI. I think that we need to redesign a > > bit ecpg_strdup(), perhaps by providing an extra input argument so as > > we can detect hard failures on OOM and let ECPGconnect() return early > > if we find a problem. > > Makes sense. In this case however I believe we should refactor the > rest of the functions in src/interfaces/ecpg/ecpglib/memory.c for > consistency. E.g. we will remove `lineno` argument and pass `bool* > alloc_failed` and let the callers make decisions. Or you could keep the "lineno" and the error generated in memory.c as this gives enough details about the location where the problem happens. We are going to need the extra "alloc_failed". > Since this is going to be a fairly large refactoring I would like to > propose it as a separate patch after we agree on this one, if it works > for you. I believe change like this deserves a separate thread for > better visibility and also separate discussion. Hmm. But both are related and the same problem, no? This is touching the same code paths.. > Not 100% sure if I fully understand this part. Are you proposing to move: > > if (string == NULL) > return NULL; > > ... check from ecpg_strdup() on the calling side, or something else? Nope, we could keep this shortcut in ecpg_strdup() as long as there is an extra field to track if an error has happened. -- Michael
Commits
-
ecpg: Improve error detection around ecpg_strdup()
- a6eabec6808c 19 (unreleased) landed
-
ecpg: Fix NULL pointer dereference during connection lookup
- c934d5673894 13.22 landed
- 408fe659a890 14.19 landed
- 0123922f82d2 15.14 landed
- 313d3102facd 16.10 landed
- 2805e1c1edd5 17.6 landed
- 0ded7615d8ca 18.0 landed
- 1b8bbee05d70 19 (unreleased) landed