From b7e65e555adc2b77dad55eb2b28338bf2e7619e1 Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Thu, 21 Jan 2016 16:35:59 +1100 Subject: [PATCH] Improve wfTempDir() fallback sequence Validate the return value of sys_get_temp_dir(), and use upload_tmp_dir if that is not writable. If nothing is writable, throw an exception. Bug: T119934 Change-Id: I27d784f55c47277bbab1192853e2e04a9d8bd39a --- includes/GlobalFunctions.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index f797e5b5d7..928066b005 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -2162,8 +2162,8 @@ function wfIsHHVM() { /** * Tries to get the system directory for temporary files. First * $wgTmpDirectory is checked, and then the TMPDIR, TMP, and TEMP - * environment variables are then checked in sequence, and if none are - * set try sys_get_temp_dir(). + * environment variables are then checked in sequence, then + * sys_get_temp_dir(), then upload_tmp_dir from php.ini. * * NOTE: When possible, use instead the tmpfile() function to create * temporary files to avoid race conditions on file creation, etc. @@ -2178,13 +2178,16 @@ function wfTempDir() { } $tmpDir = array_map( "getenv", array( 'TMPDIR', 'TMP', 'TEMP' ) ); + $tmpDir[] = sys_get_temp_dir(); + $tmpDir[] = ini_get( 'upload_tmp_dir' ); foreach ( $tmpDir as $tmp ) { if ( $tmp && file_exists( $tmp ) && is_dir( $tmp ) && is_writable( $tmp ) ) { return $tmp; } } - return sys_get_temp_dir(); + throw new MWException( 'No writable temporary directory could be found. ' . + 'Please set $wgTmpDirectory to a writable directory.' ); } /** -- 2.20.1