avoid COW violation
[m6w6/ext-http] / src / php_http_client.c
index d0e6e80107c28dc65de29971d3d348a2689fba86..cedc239b68c1f780c2df5ef7b46b5bf74f448992 100644 (file)
@@ -75,6 +75,7 @@ void php_http_client_options_set_subr(zval *instance, char *key, size_t len, zva
 
                array_init(&new_opts);
                old_opts = zend_read_property(this_ce, instance, ZEND_STRL("options"), 0, &old_opts_tmp);
+
                if (Z_TYPE_P(old_opts) == IS_ARRAY) {
                        array_copy(Z_ARRVAL_P(old_opts), Z_ARRVAL(new_opts));
                }
@@ -88,6 +89,7 @@ void php_http_client_options_set_subr(zval *instance, char *key, size_t len, zva
                        }
                } else if (opts && zend_hash_num_elements(Z_ARRVAL_P(opts))) {
                        if ((entry = zend_symtable_str_find(Z_ARRVAL(new_opts), key, len))) {
+                               SEPARATE_ZVAL(entry);
                                array_join(Z_ARRVAL_P(opts), Z_ARRVAL_P(entry), 0, 0);
                        } else {
                                Z_ADDREF_P(opts);
@@ -376,7 +378,7 @@ static HashTable *php_http_client_object_get_gc(zval *object, zval **table, int
        *n = 0;
        *table = obj->gc = erealloc(obj->gc, sizeof(zval) * count);
 
-#if PHP_HTTP_HAVE_CURL
+#if PHP_HTTP_HAVE_LIBCURL
        if (obj->client->ops == php_http_client_curl_get_ops()) {
                php_http_client_curl_t *curl = obj->client->ctx;
 
@@ -1270,7 +1272,8 @@ static PHP_METHOD(HttpClient, getAvailableConfiguration)
 }
 
 ZEND_BEGIN_ARG_INFO_EX(ai_HttpClient_setDebug, 0, 0, 1)
-       ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
+       /* using IS_CALLABLE type hint would create a forwards compatibility break */
+       ZEND_ARG_INFO(0, callback)
 ZEND_END_ARG_INFO();
 static PHP_METHOD(HttpClient, setDebug)
 {