mirror of https://github.com/postgres/postgres
libpq: Use strerror_r instead of strerror
Commit453c468737
introduced a use of strerror() into libpq, but that is not thread-safe. Fix by using strerror_r() instead. In passing, update some of the code comments added by453c468737
, as we have learned more about the reason for the change in OpenSSL that started this. Reviewed-by: Daniel Gustafsson <daniel@yesql.se> Discussion: Discussion: https://postgr.es/m/b6fb018b-f05c-4afd-abd3-318c649faf18@highgo.ca
This commit is contained in:
parent
ce3045e9b0
commit
6ddc8556ce
|
@ -1270,10 +1270,11 @@ SSLerrmessage(unsigned long ecode)
|
|||
return errreason;
|
||||
|
||||
/*
|
||||
* In OpenSSL 3.0.0 and later, ERR_reason_error_string randomly refuses to
|
||||
* map system errno values. We can cover that shortcoming with this bit
|
||||
* of code. Older OpenSSL versions don't have the ERR_SYSTEM_ERROR macro,
|
||||
* but that's okay because they don't have the shortcoming either.
|
||||
* In OpenSSL 3.0.0 and later, ERR_reason_error_string does not map system
|
||||
* errno values anymore. (See OpenSSL source code for the explanation.)
|
||||
* We can cover that shortcoming with this bit of code. Older OpenSSL
|
||||
* versions don't have the ERR_SYSTEM_ERROR macro, but that's okay because
|
||||
* they don't have the shortcoming either.
|
||||
*/
|
||||
#ifdef ERR_SYSTEM_ERROR
|
||||
if (ERR_SYSTEM_ERROR(ecode))
|
||||
|
|
|
@ -1689,15 +1689,16 @@ SSLerrmessage(unsigned long ecode)
|
|||
}
|
||||
|
||||
/*
|
||||
* In OpenSSL 3.0.0 and later, ERR_reason_error_string randomly refuses to
|
||||
* map system errno values. We can cover that shortcoming with this bit
|
||||
* of code. Older OpenSSL versions don't have the ERR_SYSTEM_ERROR macro,
|
||||
* but that's okay because they don't have the shortcoming either.
|
||||
* In OpenSSL 3.0.0 and later, ERR_reason_error_string does not map system
|
||||
* errno values anymore. (See OpenSSL source code for the explanation.)
|
||||
* We can cover that shortcoming with this bit of code. Older OpenSSL
|
||||
* versions don't have the ERR_SYSTEM_ERROR macro, but that's okay because
|
||||
* they don't have the shortcoming either.
|
||||
*/
|
||||
#ifdef ERR_SYSTEM_ERROR
|
||||
if (ERR_SYSTEM_ERROR(ecode))
|
||||
{
|
||||
strlcpy(errbuf, strerror(ERR_GET_REASON(ecode)), SSL_ERR_LEN);
|
||||
strerror_r(ERR_GET_REASON(ecode), errbuf, SSL_ERR_LEN);
|
||||
return errbuf;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue