mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 22:26:49 +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
0454666758
commit
d1ac060e63
@ -546,9 +546,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;
|
||||
@ -575,13 +575,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