Skip to content

Commit 4a9f78f

Browse files
committed
Merge branch 'PHP-7.2' into PHP-7.3
2 parents 79efd55 + c8c183e commit 4a9f78f

File tree

5 files changed

+54
-2
lines changed

5 files changed

+54
-2
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 7.3.9
44

5+
- Curl:
6+
. Fixed bug #77946 (Bad cURL resources returned by curl_multi_info_read()).
7+
(Abyr Valg)
8+
59
- Standard:
610
. Fixed bug #69100 (Bus error from stream_copy_to_stream (file -> SSL stream)
711
with invalid length). (Nikita)

ext/curl/interface.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,6 @@ static void _php_curl_close_ex(php_curl *ch);
150150
static void _php_curl_close(zend_resource *rsrc);
151151

152152

153-
#define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err;
154-
155153
#define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s) - 1, (zend_long) v);
156154
#define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s) - 1, (double) v);
157155
#define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s) - 1, (char *) (v ? v : ""));

ext/curl/multi.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ PHP_FUNCTION(curl_multi_info_read)
334334
CURLMsg *tmp_msg;
335335
int queued_msgs;
336336
zval *zmsgs_in_queue = NULL;
337+
php_curl *ch;
337338

338339
ZEND_PARSE_PARAMETERS_START(1, 2)
339340
Z_PARAM_RESOURCE(z_mh)
@@ -371,6 +372,10 @@ PHP_FUNCTION(curl_multi_info_read)
371372
being done in add_assoc_resource */
372373
Z_ADDREF_P(pz_ch);
373374

375+
/* we must save result to be able to read error message */
376+
ch = (php_curl*)zend_fetch_resource(Z_RES_P(pz_ch), le_curl_name, le_curl);
377+
SAVE_CURL_ERROR(ch, tmp_msg->data.result);
378+
374379
/* add_assoc_resource automatically creates a new zval to
375380
wrap the "resource" represented by the current pz_ch */
376381

ext/curl/php_curl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ extern zend_module_entry curl_module_entry;
5858
#define PHP_CURL_RETURN 4
5959
#define PHP_CURL_IGNORE 7
6060

61+
#define SAVE_CURL_ERROR(__handle, __err) (__handle)->err.no = (int) __err;
62+
6163
extern int le_curl;
6264
#define le_curl_name "cURL handle"
6365
extern int le_curl_multi_handle;

ext/curl/tests/bug77946.phpt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--TEST--
2+
Bug #77946 (Errored cURL resources returned by curl_multi_info_read() must be compatible with curl_errno() and curl_error())
3+
--SKIPIF--
4+
<?php
5+
6+
if (!extension_loaded('curl')) {
7+
exit('skip curl extension not loaded');
8+
}
9+
10+
?>
11+
--FILE--
12+
<?php
13+
$urls = array(
14+
'unknown://scheme.tld',
15+
);
16+
17+
$mh = curl_multi_init();
18+
19+
foreach ($urls as $i => $url) {
20+
$conn[$i] = curl_init($url);
21+
curl_multi_add_handle($mh, $conn[$i]);
22+
}
23+
24+
do {
25+
$status = curl_multi_exec($mh, $active);
26+
$info = curl_multi_info_read($mh);
27+
if (false !== $info) {
28+
var_dump($info['result']);
29+
var_dump(curl_errno($info['handle']));
30+
var_dump(curl_error($info['handle']));
31+
}
32+
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);
33+
34+
foreach ($urls as $i => $url) {
35+
curl_close($conn[$i]);
36+
}
37+
38+
curl_multi_close($mh);
39+
?>
40+
--EXPECTF--
41+
int(1)
42+
int(1)
43+
string(%d) "Protocol %Sunknown%S not supported or disabled in libcurl"

0 commit comments

Comments
 (0)