@@ -1717,9 +1717,9 @@ static void curl_free_post(void **post)
1717
1717
1718
1718
/* {{{ curl_free_slist
1719
1719
*/
1720
- static void curl_free_slist (void * * slist )
1720
+ static void curl_free_slist (void * slist )
1721
1721
{
1722
- curl_slist_free_all (( struct curl_slist * ) * slist );
1722
+ curl_slist_free_all (* (( struct curl_slist * * ) slist ) );
1723
1723
}
1724
1724
/* }}} */
1725
1725
@@ -1790,9 +1790,11 @@ static void alloc_curl_handle(php_curl **ch)
1790
1790
(* ch )-> handlers -> read -> stream = NULL ;
1791
1791
1792
1792
zend_llist_init (& (* ch )-> to_free -> str , sizeof (char * ), (llist_dtor_func_t ) curl_free_string , 0 );
1793
- zend_llist_init (& (* ch )-> to_free -> slist , sizeof (struct curl_slist ), (llist_dtor_func_t ) curl_free_slist , 0 );
1794
1793
zend_llist_init (& (* ch )-> to_free -> post , sizeof (struct HttpPost ), (llist_dtor_func_t ) curl_free_post , 0 );
1795
1794
(* ch )-> safe_upload = 1 ; /* for now, for BC reason we allow unsafe API */
1795
+
1796
+ (* ch )-> to_free -> slist = emalloc (sizeof (HashTable ));
1797
+ zend_hash_init ((* ch )-> to_free -> slist , 4 , NULL , curl_free_slist , 0 );
1796
1798
}
1797
1799
/* }}} */
1798
1800
@@ -2043,6 +2045,7 @@ PHP_FUNCTION(curl_copy_handle)
2043
2045
}
2044
2046
#endif
2045
2047
2048
+ efree (dupch -> to_free -> slist );
2046
2049
efree (dupch -> to_free );
2047
2050
dupch -> to_free = ch -> to_free ;
2048
2051
@@ -2438,7 +2441,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
2438
2441
2439
2442
ph = HASH_OF (* zvalue );
2440
2443
if (!ph ) {
2441
- char * name ;
2444
+ char * name = NULL ;
2442
2445
switch (option ) {
2443
2446
case CURLOPT_HTTPHEADER :
2444
2447
name = "CURLOPT_HTTPHEADER" ;
@@ -2488,7 +2491,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
2488
2491
return 1 ;
2489
2492
}
2490
2493
}
2491
- zend_llist_add_element ( & ch -> to_free -> slist , & slist );
2494
+ zend_hash_index_update ( ch -> to_free -> slist , ( ulong ) option , & slist , sizeof ( struct curl_slist * ), NULL );
2492
2495
2493
2496
error = curl_easy_setopt (ch -> cp , option , slist );
2494
2497
@@ -3266,8 +3269,9 @@ static void _php_curl_close_ex(php_curl *ch TSRMLS_DC)
3266
3269
/* cURL destructors should be invoked only by last curl handle */
3267
3270
if (Z_REFCOUNT_P (ch -> clone ) <= 1 ) {
3268
3271
zend_llist_clean (& ch -> to_free -> str );
3269
- zend_llist_clean (& ch -> to_free -> slist );
3270
3272
zend_llist_clean (& ch -> to_free -> post );
3273
+ zend_hash_destroy (ch -> to_free -> slist );
3274
+ efree (ch -> to_free -> slist );
3271
3275
efree (ch -> to_free );
3272
3276
FREE_ZVAL (ch -> clone );
3273
3277
} else {
0 commit comments