diff options
Diffstat (limited to 'ext/curl/interface.c')
-rw-r--r-- | ext/curl/interface.c | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c index fa30e45e04..87295122a2 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2393,9 +2393,10 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ case CURLOPT_DEFAULT_PROTOCOL: #endif { - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); int ret = php_curl_option_str(ch, option, ZSTR_VAL(str), ZSTR_LEN(str), 0); - zend_string_release(str); + zend_tmp_string_release(tmp_str); return ret; } @@ -2427,9 +2428,10 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ if (Z_ISNULL_P(zvalue)) { error = curl_easy_setopt(ch->cp, option, NULL); } else { - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); int ret = php_curl_option_str(ch, option, ZSTR_VAL(str), ZSTR_LEN(str), 0); - zend_string_release(str); + zend_tmp_string_release(tmp_str); return ret; } break; @@ -2438,18 +2440,20 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ /* Curl private option */ case CURLOPT_PRIVATE: { - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); int ret = php_curl_option_str(ch, option, ZSTR_VAL(str), ZSTR_LEN(str), 1); - zend_string_release(str); + zend_tmp_string_release(tmp_str); return ret; } /* Curl url option */ case CURLOPT_URL: { - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); int ret = php_curl_option_url(ch, ZSTR_VAL(str), ZSTR_LEN(str)); - zend_string_release(str); + zend_tmp_string_release(tmp_str); return ret; } @@ -2572,7 +2576,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ { zval *current; HashTable *ph; - zend_string *val; + zend_string *val, *tmp_val; struct curl_slist *slist = NULL; ph = HASH_OF(zvalue); @@ -2624,9 +2628,9 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ ZEND_HASH_FOREACH_VAL(ph, current) { ZVAL_DEREF(current); - val = zval_get_string(current); + val = zval_get_tmp_string(current, &tmp_val); slist = curl_slist_append(slist, ZSTR_VAL(val)); - zend_string_release(val); + zend_tmp_string_release(tmp_val); if (!slist) { php_error_docref(NULL, E_WARNING, "Could not build curl_slist"); return 1; @@ -2687,7 +2691,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ } ZEND_HASH_FOREACH_KEY_VAL(postfields, num_key, string_key, current) { - zend_string *postval; + zend_string *postval, *tmp_postval; /* Pretend we have a string_key here */ if (!string_key) { string_key = zend_long_to_str(num_key); @@ -2737,7 +2741,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ continue; } - postval = zval_get_string(current); + postval = zval_get_tmp_string(current, &tmp_postval); /* The arguments after _NAMELENGTH and _CONTENTSLENGTH * must be explicitly cast to long in curl_formadd @@ -2753,7 +2757,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ /* Not nice to convert between enums but we only have place for one error type */ error = (CURLcode)form_error; } - zend_string_release(postval); + zend_tmp_string_release(tmp_postval); zend_string_release(string_key); } ZEND_HASH_FOREACH_END(); @@ -2769,21 +2773,23 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ error = curl_easy_setopt(ch->cp, CURLOPT_HTTPPOST, first); } else { #if LIBCURL_VERSION_NUM >= 0x071101 - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); /* with curl 7.17.0 and later, we can use COPYPOSTFIELDS, but we have to provide size before */ error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, ZSTR_LEN(str)); error = curl_easy_setopt(ch->cp, CURLOPT_COPYPOSTFIELDS, ZSTR_VAL(str)); - zend_string_release(str); + zend_tmp_string_release(tmp_str); #else char *post = NULL; - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); post = estrndup(ZSTR_VAL(str), ZSTR_LEN(str)); zend_llist_add_element(&ch->to_free->str, &post); curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDS, post); error = curl_easy_setopt(ch->cp, CURLOPT_POSTFIELDSIZE, ZSTR_LEN(str)); - zend_string_release(str); + zend_tmp_string_release(tmp_str); #endif } break; @@ -2873,16 +2879,17 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ case CURLOPT_SSH_KNOWNHOSTS: #endif { - zend_string *str = zval_get_string(zvalue); + zend_string *tmp_str; + zend_string *str = zval_get_tmp_string(zvalue, &tmp_str); int ret; if (ZSTR_LEN(str) && php_check_open_basedir(ZSTR_VAL(str))) { - zend_string_release(str); + zend_tmp_string_release(tmp_str); return FAILURE; } ret = php_curl_option_str(ch, option, ZSTR_VAL(str), ZSTR_LEN(str), 0); - zend_string_release(str); + zend_tmp_string_release(tmp_str); return ret; } |