@@ -1631,12 +1631,19 @@ static bool php_curl_set_callable_handler(zend_fcall_info_cache *const handler_f
1631
1631
}
1632
1632
1633
1633
1634
- #define HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (curl_ptr , constant_no_function , handler_type ) \
1634
+ #define HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (curl_ptr , constant_no_function , handler_type , default_method ) \
1635
1635
case constant_no_function##FUNCTION: { \
1636
1636
bool result = php_curl_set_callable_handler(&curl_ptr->handlers.handler_type->fcc, zvalue, is_array_config, #constant_no_function "FUNCTION"); \
1637
1637
if (!result) { \
1638
1638
return FAILURE; \
1639
1639
} \
1640
+ if (!curl_ptr->handlers.handler_type) { \
1641
+ return SUCCESS; \
1642
+ } \
1643
+ if (!curl_ptr->handlers.handler_type->fcc.function_handler || !ZEND_FCC_INITIALIZED(curl_ptr->handlers.handler_type->fcc)) { \
1644
+ curl_ptr->handlers.handler_type->method = default_method; \
1645
+ return FAILURE; \
1646
+ } \
1640
1647
curl_ptr->handlers.handler_type->method = PHP_CURL_USER; \
1641
1648
break; \
1642
1649
}
@@ -1659,9 +1666,9 @@ static zend_result _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue
1659
1666
1660
1667
switch (option ) {
1661
1668
/* Callable options */
1662
- HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_WRITE , write );
1663
- HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_HEADER , write_header );
1664
- HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_READ , read );
1669
+ HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_WRITE , write , PHP_CURL_STDOUT );
1670
+ HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_HEADER , write_header , PHP_CURL_IGNORE );
1671
+ HANDLE_CURL_OPTION_CALLABLE_PHP_CURL_USER (ch , CURLOPT_READ , read , PHP_CURL_DIRECT );
1665
1672
1666
1673
HANDLE_CURL_OPTION_CALLABLE (ch , CURLOPT_PROGRESS , handlers .progress , curl_progress );
1667
1674
HANDLE_CURL_OPTION_CALLABLE (ch , CURLOPT_XFERINFO , handlers .xferinfo , curl_xferinfo );
0 commit comments