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…
x
Reference in New Issue
Block a user