]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #30750 (Meaningful error message when upload directory is not
authorIlia Alshanetsky <iliaa@php.net>
Thu, 11 Nov 2004 00:38:44 +0000 (00:38 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 11 Nov 2004 00:38:44 +0000 (00:38 +0000)
accessible).

NEWS
main/rfc1867.c

diff --git a/NEWS b/NEWS
index 2e1fc36c68f8e5ad5725a0a7f56cf97d2db62f16..d254f9633bacbe2d5b583172413695f4246b84d8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ PHP                                                                        NEWS
 - Extended the functionality of is_subclass_of() to accept either a class name
   or an object as first parameter. (Andrey) 
 - Fixed potential problems with unserializing invalid serialize data. (Marcus)
+- Fixed bug #30750 (Meaningful error message when upload directory is not 
+  accessible). (Ilia)
 - Fixed bug #30685 (Malformed SOAPClient http header reequest). (Dmitry)
 - Fixed bug #30672 (Problem handling exif data in jpeg images at unusual 
   places). (Marcus)
index 7350508cff5a585171961cdfb77b219686d361df..8942235243a97cf3eb0907e692709992b9d96db9 100644 (file)
@@ -130,6 +130,7 @@ void php_mb_gpc_stack_variable(char *param, char *value, char ***pval_list, int
 #define UPLOAD_ERROR_B    2  /* Uploaded file exceeded MAX_FILE_SIZE */
 #define UPLOAD_ERROR_C    3  /* Partially uploaded */
 #define UPLOAD_ERROR_D    4  /* No file uploaded */
+#define UPLOAD_ERROR_E    6  /* Missing /tmp or similar directory */
 
 void php_rfc1867_register_constants(TSRMLS_D)
 {
@@ -138,6 +139,7 @@ void php_rfc1867_register_constants(TSRMLS_D)
        REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_FORM_SIZE",  UPLOAD_ERROR_B,  CONST_CS | CONST_PERSISTENT);
        REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_PARTIAL",    UPLOAD_ERROR_C,  CONST_CS | CONST_PERSISTENT);
        REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_NO_FILE",    UPLOAD_ERROR_D,  CONST_CS | CONST_PERSISTENT);
+       REGISTER_MAIN_LONG_CONSTANT("UPLOAD_ERR_NO_TMP_DIR", UPLOAD_ERROR_E,  CONST_CS | CONST_PERSISTENT);
 }
 
 static void normalize_protected_variable(char *varname TSRMLS_DC)
@@ -963,12 +965,14 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
                                }
                        }
 
+                       total_bytes = cancel_upload = 0;
+
                        if (!skip_upload) {
                                /* Handle file */
                                fp = php_open_temporary_file(PG(upload_tmp_dir), "php", &temp_filename TSRMLS_CC);
                                if (!fp) {
                                        sapi_module.sapi_error(E_WARNING, "File upload error - unable to create a temporary file");
-                                       skip_upload = 1;
+                                       cancel_upload = UPLOAD_ERROR_E;
                                }
                        }
                        if (skip_upload) {
@@ -977,9 +981,6 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
                                continue;
                        }       
 
-                       total_bytes = 0;
-                       cancel_upload = 0;
-
                        if(strlen(filename) == 0) {
 #if DEBUG_FILE_UPLOAD
                                sapi_module.sapi_error(E_NOTICE, "No file uploaded");
@@ -1011,11 +1012,13 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
                                                total_bytes += wlen;
                                        }
                                } 
-                       } 
-                       fclose(fp);
+                       }
+                       if (fp) { /* may not be initialized if file could not be created */
+                               fclose(fp);
+                       }
 
 #if DEBUG_FILE_UPLOAD
-                       if(strlen(filename) > 0 && total_bytes == 0) {
+                       if(strlen(filename) > 0 && total_bytes == 0 && !cancel_upload) {
                                sapi_module.sapi_error(E_WARNING, "Uploaded file size 0 - file [%s=%s] not saved", param, filename);
                                cancel_upload = 5;
                        }
@@ -1023,7 +1026,9 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)
 
                        if (cancel_upload) {
                                if (temp_filename) {
-                                       unlink(temp_filename);
+                                       if (cancel_upload != UPLOAD_ERROR_E) { /* file creation failed */
+                                               unlink(temp_filename);
+                                       }
                                        efree(temp_filename);
                                }
                                temp_filename="";