mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Add missing bad-PGconn guards in libpq entry points.
There's a convention that externally-visible libpq functions should check for a NULL PGconn pointer, and fail gracefully instead of crashing. PQflush() and PQisnonblocking() didn't get that memo though. Also add a similar check to PQdefaultSSLKeyPassHook_OpenSSL; while it's not clear that ordinary usage could reach that with a null conn pointer, it's cheap enough to check, so let's be consistent. Daniele Varrazzo and Tom Lane Discussion: https://postgr.es/m/CA+mi_8Zm_mVVyW1iNFgyMd9Oh0Nv8-F+7Y3-BqwMgTMHuo_h2Q@mail.gmail.com
This commit is contained in:
		@@ -3267,6 +3267,8 @@ PQsetnonblocking(PGconn *conn, int arg)
 | 
				
			|||||||
int
 | 
					int
 | 
				
			||||||
PQisnonblocking(const PGconn *conn)
 | 
					PQisnonblocking(const PGconn *conn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (!conn || conn->status == CONNECTION_BAD)
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
	return pqIsnonblocking(conn);
 | 
						return pqIsnonblocking(conn);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3286,6 +3288,8 @@ PQisthreadsafe(void)
 | 
				
			|||||||
int
 | 
					int
 | 
				
			||||||
PQflush(PGconn *conn)
 | 
					PQflush(PGconn *conn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if (!conn || conn->status == CONNECTION_BAD)
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
	return pqFlush(conn);
 | 
						return pqFlush(conn);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1747,7 +1747,7 @@ err:
 | 
				
			|||||||
int
 | 
					int
 | 
				
			||||||
PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn)
 | 
					PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (conn->sslpassword)
 | 
						if (conn && conn->sslpassword)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (strlen(conn->sslpassword) + 1 > size)
 | 
							if (strlen(conn->sslpassword) + 1 > size)
 | 
				
			||||||
			fprintf(stderr, libpq_gettext("WARNING: sslpassword truncated\n"));
 | 
								fprintf(stderr, libpq_gettext("WARNING: sslpassword truncated\n"));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user