diff options
-rw-r--r-- | ext/curl/multi.c | 7 | ||||
-rw-r--r-- | ext/curl/tests/bug67643.phpt | 30 |
2 files changed, 35 insertions, 2 deletions
diff --git a/ext/curl/multi.c b/ext/curl/multi.c index d9e6df2c98..d9ace4119c 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -240,12 +240,15 @@ PHP_FUNCTION(curl_multi_getcontent) ZEND_FETCH_RESOURCE(ch, php_curl *, z_ch, -1, le_curl_name, le_curl); - if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.s) { + if (ch->handlers->write->method == PHP_CURL_RETURN) { + if (!ch->handlers->write->buf.s) { + RETURN_EMPTY_STRING(); + } smart_str_0(&ch->handlers->write->buf); RETURN_STR(zend_string_copy(ch->handlers->write->buf.s)); } - RETURN_EMPTY_STRING(); + RETURN_NULL(); } /* }}} */ diff --git a/ext/curl/tests/bug67643.phpt b/ext/curl/tests/bug67643.phpt new file mode 100644 index 0000000000..ad59f2c12c --- /dev/null +++ b/ext/curl/tests/bug67643.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #67643 (curl_multi_getcontent returns '' when RETURNTRANSFER isn't set) +--SKIPIF-- +<?php +if (!extension_loaded('curl')) print 'skip'; +?> +--FILE-- +<?php + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, 'file://'. dirname(__FILE__) . DIRECTORY_SEPARATOR .'curl_testdata1.txt'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); + + $mh = curl_multi_init(); + curl_multi_add_handle($mh, $ch); + + $running = 0; + do { + curl_multi_exec($mh, $running); + } while($running > 0); + + $results = curl_multi_getcontent($ch); + + curl_multi_remove_handle($mh, $ch); + curl_multi_close($mh); + + var_dump($results); +?> +--EXPECT-- +CURL1 +NULL |