From 0f04dff942520d99d63f5fd13f3d76a5919b10b3 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Thu, 11 Nov 2004 00:38:44 +0000 Subject: [PATCH] MFH: Fixed bug #30750 (Meaningful error message when upload directory is not accessible). --- NEWS | 2 ++ main/rfc1867.c | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 2e1fc36c68..d254f9633b 100644 --- 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) diff --git a/main/rfc1867.c b/main/rfc1867.c index 7350508cff..8942235243 100644 --- a/main/rfc1867.c +++ b/main/rfc1867.c @@ -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=""; -- 2.50.1