Handle NULL strings gracefully during constant registration
[m6w6/ext-http] / src / php_http_client_curl.c
index 1626b712e41496c6d98561c7ec794f067c830016..f07bb8f4abbcefa148b39b7a2d2a2b5ef718192f 100644 (file)
@@ -21,7 +21,7 @@
 #      include <openssl/ssl.h>
 #endif
 #if PHP_HTTP_HAVE_LIBCURL_GNUTLS
-#      include <gnutls.h>
+#      include <gnutls/gnutls.h>
 #endif
 
 typedef struct php_http_client_curl_handler {
@@ -2206,7 +2206,7 @@ static ZEND_RESULT_CODE php_http_client_curl_dequeue(php_http_client_t *h, php_h
        php_http_client_curl_t *curl = h->ctx;
        php_http_client_curl_handler_t *handler = enqueue->opaque;
 
-       if (h->callback.depth) {
+       if (h->callback.depth && !CG(unclean_shutdown)) {
                php_error_docref(NULL, E_WARNING, "Could not dequeue request while executing callbacks");
                return FAILURE;
        }
@@ -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