Bug #77624 [Asn->Nab]: curl_getinfo() returns bad or empty entries for responses pushed via HTTP/2

From: Date: Tue, 19 Oct 2021 15:09:53 +0000
Subject: Bug #77624 [Asn->Nab]: curl_getinfo() returns bad or empty entries for responses pushed via HTTP/2
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-237285@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77624&edit=1

 ID:                 77624
 Updated by:         cmb@php.net
 Reported by:        nicolas dot grekas+php at gmail dot com
 Summary:            curl_getinfo() returns bad or empty entries for
                     responses pushed via HTTP/2
-Status:             Assigned
+Status:             Not a bug
 Type:               Bug
 Package:            cURL related
 PHP Version:        7.3Git-2019-02-15 (Git)
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

My previous comment was about a standard PHP-7.4 on Windows
(libcurl 7.70.0-4 and nghttp2 1.40.0).  Updating this to nghttp2
1.46.0 doesn't make a difference.  However, updating to libcurl
7.79.1 fixes the "url"s at least.  Since curl_getinfo()[1] is
basically a wrapper for curl_easy_getinfo(), and since the
easy_handle is apparantly correct (correct URLs), the issue is
likely with cURL.  Please consider to report this issue upstream.

[1] <https://github.com/php/php-src/blob/php-7.4.24/ext/curl/interface.c#L3279-L3544>


Previous Comments:
------------------------------------------------------------------------
[2021-10-18 13:12:36] cmb@php.net

When testing against <https://http2.golang.org/serverpush>, I also
get fishy results.  There *might* be a bug in curl or maybe
nghttp2, which *might* have been fixed in more recent versions.
I'll need to check.

------------------------------------------------------------------------
[2019-02-15 12:19:57] nicolas dot grekas+php at gmail dot com

Description:
------------
When calling curl_getinfo() on a pushed curl handle, the resulting entries return bad timing info,
bad URL, empty primary_ip, etc.

Test script:
---------------
$mh = curl_multi_init();

curl_multi_setopt($mh, CURLMOPT_PUSHFUNCTION, $onPush = function ($p, $c, $h) {
    return CURL_PUSH_OK;
});

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://http2-push.io');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_multi_add_handle($mh, $ch);

do {
    while (CURLM_CALL_MULTI_PERFORM === curl_multi_exec($mh, $active));

    while ($info = curl_multi_info_read($mh)) {
        print_r(curl_getinfo($info['handle']));
    }

    if (-1 === curl_multi_select($mh)) {
        usleep(1000);
    }
} while ($active);


Expected result:
----------------
entry "url" should be set to the pushed URL
entry "primary_ip" should be set to the pushing server IP
entry "starttransfer_time" should return plausible value
etc.

Actual result:
--------------
entry "url" is set to the URL of the parent response
entry "primary_ip" is empty
entry "starttransfer_time" is 0.0 or some impossible (more than 1M seconds)
etc.


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=77624&edit=1


Thread (3 messages)

« previous php.bugs (#237285) next »