Обсуждение: [PATCH] Add error message for out-of-memory in passwordFromFile()

Поиск
Список
Период
Сортировка

[PATCH] Add error message for out-of-memory in passwordFromFile()

От
Joshua Shanks
Дата:
Hi,

I noticed a XXX comment in fe-connect.c at line 8064 indicating that an error message would be nice when strdup() fails while reading the password file. Currently, passwordFromFile() silently returns NULL on allocation failure, leaving users without feedback on what went wrong.

This patch adds proper error reporting by:

1. Adding a PGconn *conn parameter to passwordFromFile() to enable error reporting via libpq_append_conn_error()
2. Reporting "out of memory" when strdup() fails, following the pattern used by other OOM handlers in fe-connect.c

The conn parameter is placed first, consistent with the object-oriented convention used throughout libpq (see connectOptions1, fillPGconn, store_conn_addrinfo, etc.).

Cheers,
Joshua
Вложения

Re: [PATCH] Add error message for out-of-memory in passwordFromFile()

От
Michael Paquier
Дата:
On Sat, Nov 01, 2025 at 04:49:02PM -0700, Joshua Shanks wrote:
> The conn parameter is placed first, consistent with the object-oriented
> convention used throughout libpq (see connectOptions1,
> fillPGconn, store_conn_addrinfo, etc.).

Sounds OK to me.  Nice catch.  It's probably not worth bothering in
the stable branches as the error is unlikely going to show up.
--
Michael

Вложения

Re: [PATCH] Add error message for out-of-memory in passwordFromFile()

От
Michael Paquier
Дата:
On Sun, Nov 02, 2025 at 09:09:55AM +0900, Michael Paquier wrote:
> Sounds OK to me.  Nice catch.  It's probably not worth bothering in
> the stable branches as the error is unlikely going to show up.

And, while checking the surroundings, I have noticed that your patch
is incomplete: passwordFromFile() is not designed currently in such a
way in fe-connect.c so as it is possible for its callers to make a
difference between one of the valid cases (like a dbname or user name
equal to NULL, service file that cannot be opened, etc.) and an error.

The point would be to have pqConnectOptions2() take its oom_error path
in the case you are pointing at.  It seems to me that the correct
answer would be to extend passwordFromFile() with an extra "const char
**errmsg", where an error is saved, assign an error string in the
routine, check if the error pointer is set when exiting
passwordFromFile() in pqConnectOptions2(), and consume the error
properly before failing in pqConnectOptions2() with a CONNECTION_BAD.
--
Michael

Вложения