mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-31 16:27:22 +02:00
Avoid null pointer dereference if error result lacks SQLSTATE.
Although error results received from the backend should always have
a SQLSTATE field, ones generated by libpq won't, making this code
vulnerable to a crash after, say, untimely loss of connection.
Noted by Coverity.
Oversight in commit 403a3d91c
. Back-patch to 9.5, as that was.
This commit is contained in:
parent
bb62df46bc
commit
0041941f5b
@ -541,9 +541,9 @@ bool
|
||||
IsLockTableGeneric(Archive *AHX)
|
||||
{
|
||||
ArchiveHandle *AH = (ArchiveHandle *) AHX;
|
||||
PGresult *res;
|
||||
char *sqlstate;
|
||||
bool retval;
|
||||
PGresult *res;
|
||||
char *sqlstate;
|
||||
bool retval;
|
||||
|
||||
if (AHX->remoteVersion >= 140000)
|
||||
return true;
|
||||
@ -570,13 +570,15 @@ IsLockTableGeneric(Archive *AHX)
|
||||
break;
|
||||
case PGRES_FATAL_ERROR:
|
||||
sqlstate = PQresultErrorField(res, PG_DIAG_SQLSTATE);
|
||||
if (strcmp(sqlstate, ERRCODE_WRONG_OBJECT_TYPE) == 0)
|
||||
if (sqlstate &&
|
||||
strcmp(sqlstate, ERRCODE_WRONG_OBJECT_TYPE) == 0)
|
||||
{
|
||||
retval = false;
|
||||
break;
|
||||
}
|
||||
else if (strcmp(sqlstate, ERRCODE_LOCK_NOT_AVAILABLE) == 0 ||
|
||||
strcmp(sqlstate, ERRCODE_INSUFFICIENT_PRIVILEGE) == 0)
|
||||
else if (sqlstate &&
|
||||
(strcmp(sqlstate, ERRCODE_LOCK_NOT_AVAILABLE) == 0 ||
|
||||
strcmp(sqlstate, ERRCODE_INSUFFICIENT_PRIVILEGE) == 0))
|
||||
{
|
||||
retval = true;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user