diff --git a/lang/php7-pecl-http/Makefile b/lang/php7-pecl-http/Makefile index be9267a74..f909bac6a 100644 --- a/lang/php7-pecl-http/Makefile +++ b/lang/php7-pecl-http/Makefile @@ -9,7 +9,7 @@ PECL_NAME:=pecl_http PECL_LONGNAME:=Extended HTTP Support PKG_VERSION:=3.1.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MD5SUM:=e3de67b156e7d5f6c2e5eb1e2b5f0acceb7004f1260d68c9f8b2c0f9629aabf0 PKG_NAME:=php7-pecl-http diff --git a/lang/php7-pecl-http/patches/200-string_or_null_register.patch b/lang/php7-pecl-http/patches/200-string_or_null_register.patch new file mode 100644 index 000000000..f2d37eebc --- /dev/null +++ b/lang/php7-pecl-http/patches/200-string_or_null_register.patch @@ -0,0 +1,57 @@ +From ab5b4e3acd2b0379e5d8bc95a8d4f83ce5c91fb7 Mon Sep 17 00:00:00 2001 +From: Michael Heimpold +Date: Sun, 4 Jun 2017 15:00:33 +0200 +Subject: [PATCH] Handle NULL strings gracefully during constant registration + +When libcurl is compiled not using e.g. libz or SSL, then a call to +curl_version_info could return NULL in the corresponding fields of +curl_version_info_data. + +Passing such NULL pointers down to REGISTER_NS_STRING_CONSTANT results +in a segfault during php startup, so let's check for this special case +and register a NULL constant in this case. + +Signed-off-by: Michael Heimpold +--- + src/php_http_client_curl.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/src/php_http_client_curl.c b/src/php_http_client_curl.c +index f286324..f07bb8f 100644 +--- a/src/php_http_client_curl.c ++++ b/src/php_http_client_curl.c +@@ -2429,6 +2429,14 @@ php_http_client_ops_t *php_http_client_curl_get_ops(void) + return &php_http_client_curl_ops; + } + ++#define REGISTER_NS_STRING_OR_NULL_CONSTANT(ns, name, str, flags) \ ++ do { \ ++ if ((str) != NULL) { \ ++ REGISTER_NS_STRING_CONSTANT(ns, name, str, flags); \ ++ } else { \ ++ REGISTER_NS_NULL_CONSTANT(ns, name, flags); \ ++ } \ ++ } while (0) + + PHP_MINIT_FUNCTION(http_client_curl) + { +@@ -2509,12 +2517,12 @@ PHP_MINIT_FUNCTION(http_client_curl) + REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl", "VERSIONS", curl_version(), CONST_CS|CONST_PERSISTENT); + #if CURLVERSION_NOW >= 0 + REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl\\Versions", "CURL", (char *) info->version, CONST_CS|CONST_PERSISTENT); +- REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl\\Versions", "SSL", (char *) info->ssl_version, CONST_CS|CONST_PERSISTENT); +- REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl\\Versions", "LIBZ", (char *) info->libz_version, CONST_CS|CONST_PERSISTENT); ++ REGISTER_NS_STRING_OR_NULL_CONSTANT("http\\Client\\Curl\\Versions", "SSL", (char *) info->ssl_version, CONST_CS|CONST_PERSISTENT); ++ REGISTER_NS_STRING_OR_NULL_CONSTANT("http\\Client\\Curl\\Versions", "LIBZ", (char *) info->libz_version, CONST_CS|CONST_PERSISTENT); + # if CURLVERSION_NOW >= 1 +- REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl\\Versions", "ARES", (char *) info->ares, CONST_CS|CONST_PERSISTENT); ++ REGISTER_NS_STRING_OR_NULL_CONSTANT("http\\Client\\Curl\\Versions", "ARES", (char *) info->ares, CONST_CS|CONST_PERSISTENT); + # if CURLVERSION_NOW >= 2 +- REGISTER_NS_STRING_CONSTANT("http\\Client\\Curl\\Versions", "IDN", (char *) info->libidn, CONST_CS|CONST_PERSISTENT); ++ REGISTER_NS_STRING_OR_NULL_CONSTANT("http\\Client\\Curl\\Versions", "IDN", (char *) info->libidn, CONST_CS|CONST_PERSISTENT); + # endif + # endif + #endif +-- +2.7.4 +