@@ -996,13 +996,15 @@ static size_t curl_passwd(void *ctx, char *prompt, char *buf, int buflen)
996
996
/* }}} */
997
997
#endif
998
998
999
+ #if LIBCURL_VERSION_NUM < 0x071101
999
1000
/* {{{ curl_free_string
1000
1001
*/
1001
1002
static void curl_free_string (void * * string )
1002
1003
{
1003
1004
efree (* string );
1004
1005
}
1005
1006
/* }}} */
1007
+ #endif
1006
1008
1007
1009
/* {{{ curl_free_post
1008
1010
*/
@@ -1077,7 +1079,9 @@ static void alloc_curl_handle(php_curl **ch)
1077
1079
1078
1080
memset (& (* ch )-> err , 0 , sizeof ((* ch )-> err ));
1079
1081
1082
+ #if LIBCURL_VERSION_NUM < 0x071101
1080
1083
zend_llist_init (& (* ch )-> to_free .str , sizeof (char * ), (llist_dtor_func_t ) curl_free_string , 0 );
1084
+ #endif
1081
1085
zend_llist_init (& (* ch )-> to_free .slist , sizeof (struct curl_slist ), (llist_dtor_func_t ) curl_free_slist , 0 );
1082
1086
zend_llist_init (& (* ch )-> to_free .post , sizeof (struct HttpPost ), (llist_dtor_func_t ) curl_free_post , 0 );
1083
1087
}
@@ -1136,11 +1140,15 @@ PHP_FUNCTION(curl_init)
1136
1140
#endif
1137
1141
1138
1142
if (argc > 0 ) {
1143
+ #if LIBCURL_VERSION_NUM >= 0x071100
1144
+ curl_easy_setopt (ch -> cp , CURLOPT_URL , Z_STRVAL_PP (url ));
1145
+ #else
1139
1146
char * urlcopy ;
1140
1147
1141
1148
urlcopy = estrndup (Z_STRVAL_PP (url ), Z_STRLEN_PP (url ));
1142
1149
curl_easy_setopt (ch -> cp , CURLOPT_URL , urlcopy );
1143
1150
zend_llist_add_element (& ch -> to_free .str , & urlcopy );
1151
+ #endif
1144
1152
}
1145
1153
1146
1154
ZEND_REGISTER_RESOURCE (return_value , ch , le_curl );
@@ -1206,9 +1214,11 @@ PHP_FUNCTION(curl_copy_handle)
1206
1214
curl_easy_setopt (dupch -> cp , CURLOPT_INFILE , (void * ) dupch );
1207
1215
curl_easy_setopt (dupch -> cp , CURLOPT_WRITEHEADER , (void * ) dupch );
1208
1216
1217
+ #if LIBCURL_VERSION_NUM < 0x071101
1209
1218
zend_llist_copy (& dupch -> to_free .str , & ch -> to_free .str );
1210
1219
/* Don't try to free copied strings, they're free'd when the original handle is destroyed */
1211
1220
dupch -> to_free .str .dtor = NULL ;
1221
+ #endif
1212
1222
zend_llist_copy (& dupch -> to_free .slist , & ch -> to_free .slist );
1213
1223
zend_llist_copy (& dupch -> to_free .post , & ch -> to_free .post );
1214
1224
@@ -1331,17 +1341,24 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1331
1341
case CURLOPT_SSLENGINE_DEFAULT :
1332
1342
case CURLOPT_SSLCERTTYPE :
1333
1343
case CURLOPT_ENCODING : {
1344
+ #if LIBCURL_VERSION_NUM < 0x071100
1334
1345
char * copystr = NULL ;
1346
+ #endif
1335
1347
1336
1348
convert_to_string_ex (zvalue );
1337
1349
1338
1350
if (option == CURLOPT_URL ) {
1339
1351
PHP_CURL_CHECK_OPEN_BASEDIR (Z_STRVAL_PP (zvalue ), Z_STRLEN_PP (zvalue ), 1 );
1340
1352
}
1341
1353
1354
+ #if LIBCURL_VERSION_NUM >= 0x071100
1355
+ /* Strings passed to libcurl as ’char *’ arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */
1356
+ error = curl_easy_setopt (ch -> cp , option , Z_STRVAL_PP (zvalue ));
1357
+ #else
1342
1358
copystr = estrndup (Z_STRVAL_PP (zvalue ), Z_STRLEN_PP (zvalue ));
1343
1359
error = curl_easy_setopt (ch -> cp , option , copystr );
1344
1360
zend_llist_add_element (& ch -> to_free .str , & copystr );
1361
+ #endif
1345
1362
1346
1363
break ;
1347
1364
}
@@ -1532,6 +1549,11 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1532
1549
error = curl_easy_setopt (ch -> cp , CURLOPT_HTTPPOST , first );
1533
1550
1534
1551
} else {
1552
+ #if LIBCURL_VERSION_NUM >= 0x071101
1553
+ /* with curl 7.17.0 and later, we can use COPYPOSTFIELDS, but we have to provide size before */
1554
+ error = curl_easy_setopt (ch -> cp , CURLOPT_POSTFIELDSIZE , Z_STRLEN_PP (zvalue ));
1555
+ error = curl_easy_setopt (ch -> cp , CURLOPT_COPYPOSTFIELDS , Z_STRVAL_PP (zvalue ));
1556
+ #else
1535
1557
char * post = NULL ;
1536
1558
1537
1559
convert_to_string_ex (zvalue );
@@ -1540,6 +1562,7 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1540
1562
1541
1563
error = curl_easy_setopt (ch -> cp , CURLOPT_POSTFIELDS , post );
1542
1564
error = curl_easy_setopt (ch -> cp , CURLOPT_POSTFIELDSIZE , Z_STRLEN_PP (zvalue ));
1565
+ #endif
1543
1566
}
1544
1567
break ;
1545
1568
case CURLOPT_HTTPHEADER :
@@ -1561,20 +1584,15 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1561
1584
zend_hash_get_current_data (ph , (void * * ) & current ) == SUCCESS ;
1562
1585
zend_hash_move_forward (ph )
1563
1586
) {
1564
- char * indiv = NULL ;
1565
-
1566
1587
SEPARATE_ZVAL (current );
1567
1588
convert_to_string_ex (current );
1568
1589
1569
- indiv = estrndup (Z_STRVAL_PP (current ), Z_STRLEN_PP (current ) + 1 );
1570
- slist = curl_slist_append (slist , indiv );
1590
+ slist = curl_slist_append (slist , Z_STRVAL_PP (current ));
1571
1591
if (!slist ) {
1572
- efree (indiv );
1573
1592
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Could not build curl_slist" );
1574
1593
RETVAL_FALSE ;
1575
1594
return 1 ;
1576
1595
}
1577
- zend_llist_add_element (& ch -> to_free .str , & indiv );
1578
1596
}
1579
1597
zend_llist_add_element (& ch -> to_free .slist , & slist );
1580
1598
@@ -1589,7 +1607,9 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1589
1607
case CURLOPT_SSLCERT :
1590
1608
case CURLOPT_RANDOM_FILE :
1591
1609
case CURLOPT_COOKIEFILE : {
1610
+ #if LIBCURL_VERSION_NUM < 0x071100
1592
1611
char * copystr = NULL ;
1612
+ #endif
1593
1613
1594
1614
convert_to_string_ex (zvalue );
1595
1615
@@ -1598,11 +1618,14 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu
1598
1618
return 1 ;
1599
1619
}
1600
1620
1621
+ #if LIBCURL_VERSION_NUM >= 0x071100
1622
+ error = curl_easy_setopt (ch -> cp , option , Z_STRVAL_PP (zvalue ));
1623
+ #else
1601
1624
copystr = estrndup (Z_STRVAL_PP (zvalue ), Z_STRLEN_PP (zvalue ));
1602
1625
1603
1626
error = curl_easy_setopt (ch -> cp , option , copystr );
1604
1627
zend_llist_add_element (& ch -> to_free .str , & copystr );
1605
-
1628
+ #endif
1606
1629
break ;
1607
1630
}
1608
1631
case CURLINFO_HEADER_OUT :
@@ -1968,7 +1991,9 @@ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
1968
1991
#endif
1969
1992
1970
1993
curl_easy_cleanup (ch -> cp );
1994
+ #if LIBCURL_VERSION_NUM < 0x071101
1971
1995
zend_llist_clean (& ch -> to_free .str );
1996
+ #endif
1972
1997
zend_llist_clean (& ch -> to_free .slist );
1973
1998
zend_llist_clean (& ch -> to_free .post );
1974
1999
0 commit comments