php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #78980 pgsqlGetNotify() overlooks dead connection
Submitted: 2019-12-17 17:21 UTC Modified: -
From: kentaro at ranvis dot com Assigned:
Status: Closed Package: PDO PgSQL
PHP Version: master-Git-2019-12-17 (Git) OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: kentaro at ranvis dot com
New email:
PHP Version: OS:

 

 [2019-12-17 17:21 UTC] kentaro at ranvis dot com
Description:
------------
pgsqlGetNotify() doesn't check the result of PQconsumeInput(),
which returns 0 on error.
If a caller is pooling by calling pgsqlGetNotify(),
it will never have a chance to known when the connection is lost.

(will add a PR)

Test script:
---------------
<?php

$connArgs = ['pgsql:dbname=DB_NAME', 'USER', 'PASSWORD', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]];
$pdo = new PDO(...$connArgs);
$pdo->exec('listen "test-event"');

var_dump($pdo->pgsqlGetNotify(PDO::FETCH_NUM, 1000));

sleep(15); // kill the DB connection here
//system('sudo systemctl restart postgresql-12');
//system('net stop postgresql-x64-12 && net start postgresql-x64-12');

var_dump($pdo->pgsqlGetNotify(PDO::FETCH_NUM, 1000)); // should throw but doesn't
var_dump($pdo->query('select 1')); // throws


Expected result:
----------------
throws on $pdo->pgsqlGetNotify()

Actual result:
--------------
throws after $pdo->pgsqlGetNotify(), on $pdo->query('select 1')

Patches

Pull Requests

Pull requests:

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-12-17 17:27 UTC] kentaro at ranvis dot com
The following pull request has been associated:

Patch Name: Fix #78980: pgsqlGetNotify() overlooks dead connection
On GitHub:  https://github.com/php/php-src/pull/5020
Patch:      https://github.com/php/php-src/pull/5020.patch
 [2019-12-20 10:46 UTC] nikic@php.net
Automatic comment on behalf of kentaro@ranvis.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=7e39e6934d7eb3f480a467de7d9fbca608fc1e94
Log: Fix #78980: pgsqlGetNotify() overlooks dead connection
 [2019-12-20 10:46 UTC] nikic@php.net
-Status: Open +Status: Closed
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Oct 27 16:01:27 2024 UTC