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
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
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

Add a Patch

Pull Requests

Add a Pull Request

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-2019 The PHP Group
All rights reserved.
Last updated: Fri Nov 22 04:01:26 2019 UTC