php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #77497 Empty reponse with H2 server push and timeout
Submitted: 2019-01-21 18:16 UTC Modified: 2019-01-21 19:57 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: tobias dot nyholm at gmail dot com Assigned:
Status: Open Package: cURL related
PHP Version: 7.3Git-2019-01-21 (Git) OS: Alpine
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: tobias dot nyholm at gmail dot com
New email:
PHP Version: OS:

 

 [2019-01-21 18:16 UTC] tobias dot nyholm at gmail dot com
Description:
------------
Follow up from https://bugs.php.net/bug.php?id=76675

When I use cUrl h2 push functionality and timeouts I get a crash. 

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

$transfers = 1;
$callback = function($parent, $passed) use (&$transfers) {
    curl_setopt($passed, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
        echo "Received ".strlen($data)."\n";
        return strlen($data);
    });
    $transfers++;
    return CURL_PUSH_OK;
};
$mh = curl_multi_init();
curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
curl_multi_setopt($mh, CURLMOPT_PUSHFUNCTION, $callback);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://http2.golang.org/serverpush');
curl_setopt($ch, CURLOPT_HTTP_VERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// FIXME, this line crashes everything. Without it, everything is fine. 
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_multi_add_handle($mh, $ch);
$active = null;
do {
    $status = curl_multi_exec($mh, $active);
    do {
        $info = curl_multi_info_read($mh);
        if (false !== $info && $info['msg'] == CURLMSG_DONE) {
            $handle = $info['handle'];
            if ($handle !== null) {
                $transfers--;
                curl_multi_remove_handle($mh, $handle);
                curl_close($handle);
            }
        }
    } while ($info);
} while ($transfers);
curl_multi_close($mh);


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-01-21 19:57 UTC] tobias dot nyholm at gmail dot com
-Summary: Segfault with H2 server push and timeout +Summary: Empty reponse with H2 server push and timeout
 [2019-01-21 19:57 UTC] tobias dot nyholm at gmail dot com
Correction: No segfault, just empty responses.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Thu Jan 02 16:01:28 2025 UTC