From 8099ab74b4f401633baf7fcd394422bd3ce0122f Mon Sep 17 00:00:00 2001 From: SATO Kentaro Date: Wed, 18 Dec 2019 02:16:55 +0900 Subject: [PATCH] Fix #78980: pgsqlGetNotify() overlooks dead connection pgsqlGetNotify() didn't check result of PQconsumeInput(). --- ext/pdo_pgsql/pgsql_driver.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index ebe83140a3709..59ce46fcba392 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -1075,13 +1075,21 @@ static PHP_METHOD(PDO, pgsqlGetNotify) H = (pdo_pgsql_db_handle *)dbh->driver_data; - PQconsumeInput(H->server); + if (!PQconsumeInput(H->server)) { + pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL); + PDO_HANDLE_DBH_ERR(); + RETURN_FALSE; + } pgsql_notify = PQnotifies(H->server); if (ms_timeout && !pgsql_notify) { php_pollfd_for_ms(PQsocket(H->server), PHP_POLLREADABLE, (int)ms_timeout); - PQconsumeInput(H->server); + if (!PQconsumeInput(H->server)) { + pdo_pgsql_error(dbh, PGRES_FATAL_ERROR, NULL); + PDO_HANDLE_DBH_ERR(); + RETURN_FALSE; + } pgsql_notify = PQnotifies(H->server); }