From e12dba474e0e8e9c40b185843707d12257d5f575 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Thu, 27 Nov 2008 17:01:29 +0000 Subject: [PATCH] MFB: Fixed bug #46696 (cURL fails in upload files with specified content-type) --- NEWS | 2 ++ ext/curl/interface.c | 24 ++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 8a80f6ecd6..0f286ef40e 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ PHP NEWS - Upgraded PCRE to version 7.8 (Ilia) - Fixed memory leak inside readline_callback_handler_remove() function. (Felipe) +- Fixed bug #46696 (cURL fails in upload files with specified content-type). + (Ilia) - Fixed bug #46673 (stream_lock call with wrong paramater). (Arnaud) - Fixed bug #46649 (Setting array element with that same array produces inconsistent results). (Arnaud) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index d68f85bf43..54c7030abf 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1481,17 +1481,37 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *retu * must be explicitly cast to long in curl_formadd * use since curl needs a long not an int. */ if (*postval == '@') { + char *type; ++postval; + + if ((type = php_memnstr(postval, ";type=", sizeof(";type=") - 1, postval + strlen(postval)))) { + *type = '\0'; + } /* safe_mode / open_basedir check */ if (php_check_open_basedir(postval TSRMLS_CC) || (PG(safe_mode) && !php_checkuid(postval, "rb+", CHECKUID_CHECK_MODE_PARAM))) { + if (type) { + *type = ';'; + } RETVAL_FALSE; return 1; } - error = curl_formadd(&first, &last, + if (type) { + type++; + error = curl_formadd(&first, &last, + CURLFORM_COPYNAME, string_key, + CURLFORM_NAMELENGTH, (long)string_key_len - 1, + CURLFORM_FILE, postval, + CURLFORM_CONTENTTYPE, type, + CURLFORM_END); + *(type - 1) = ';'; + } else { + error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key, CURLFORM_NAMELENGTH, (long)string_key_len - 1, - CURLFORM_FILE, postval, + CURLFORM_FILE, postval, CURLFORM_END); + + } } else { error = curl_formadd(&first, &last, CURLFORM_COPYNAME, string_key, -- 2.50.1