]> granicus.if.org Git - php/commitdiff
Fixed bug #48962 (cURL does not upload files with specified filename).
authorIlia Alshanetsky <iliaa@php.net>
Tue, 21 Jul 2009 15:56:08 +0000 (15:56 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 21 Jul 2009 15:56:08 +0000 (15:56 +0000)
ext/curl/interface.c

index 040942aa2f2c6d9be695459173512946a08dc4f7..eef4db2a0e7a9f29f958b3e98f91d7f3ab2c9da8 100644 (file)
@@ -1863,32 +1863,32 @@ type_conflict:
                                         * must be explicitly cast to long in curl_formadd
                                         * use since curl needs a long not an int. */
                                        if (*postval == '@') {
-                                               char *type;
+                                               char *type, *filename;
                                                ++postval;
 
                                                if ((type = php_memnstr(postval, ";type=", sizeof(";type=") - 1, postval + Z_STRLEN_PP(current)))) {
                                                        *type = '\0';
                                                }
+                                               if ((filename = php_memnstr(postval, ";filename=", sizeof(";filename=") - 1, postval + Z_STRLEN_PP(current)))) {
+                                                       *filename = '\0';
+                                               }
                                                /* open_basedir check */
                                                if (php_check_open_basedir(postval TSRMLS_CC)) {
                                                        RETVAL_FALSE;
                                                        return 1;
                                                }
+                                               error = curl_formadd(&first, &last,
+                                                                               CURLFORM_COPYNAME, string_key,
+                                                                               CURLFORM_NAMELENGTH, (long)string_key_len - 1,
+                                                                               CURLFORM_FILENAME, filename ? filename : postval,
+                                                                               CURLFORM_CONTENTTYPE, type ? type + sizeof(";type=") - 1 : "application/octet-stream",
+                                                                               CURLFORM_FILE, postval,
+                                                                               CURLFORM_END);
                                                if (type) {
-                                                       error = curl_formadd(&first, &last,
-                                                                                        CURLFORM_COPYNAME, key,
-                                                                                        CURLFORM_NAMELENGTH, l,
-                                                                                        CURLFORM_FILE, postval,
-                                                                                        CURLFORM_CONTENTTYPE, type + sizeof(";type=") - 1,
-                                                                                        CURLFORM_END);
                                                        *type = ';';
-                                               } else {
-                                                       error = curl_formadd(&first, &last,
-                                                                                        CURLFORM_COPYNAME, key,
-                                                                                        CURLFORM_NAMELENGTH, l,
-                                                                                        CURLFORM_FILE, postval,
-                                                                                        CURLFORM_END);
-
+                                               }
+                                               if (filename) {
+                                                       *filename = ';';
                                                }
                                        } else {
                                                error = curl_formadd(&first, &last,