From 771fc167b60a48f8c4a17ca47d668582414deabf Mon Sep 17 00:00:00 2001 From: Dominik Schilling Date: Tue, 9 Aug 2016 21:54:30 +0000 Subject: [PATCH] Media: In `_wp_handle_upload()` use `call_user_func_array()` to call the upload error handler. The default error handler `wp_handle_upload_error()` expects a reference for the first parameter but `call_user_func()` doesn't pass parameters by reference. The current code didn't produce any issues until now. PHP 7.0.9 (and PHP 7.1) is now stricter and prevents calling the error handler with a warning: > PHP Warning: Parameter 1 to wp_handle_upload_error() expected to be a reference, value given. To restore the error handler `_wp_handle_upload()` now uses `call_user_func_array()`. Props jbrinley. Props jorbin for review. Fixes #37570. Built from https://develop.svn.wordpress.org/trunk@38235 git-svn-id: http://core.svn.wordpress.org/trunk@38176 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/file.php | 14 +++++++------- wp-includes/version.php | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php index 6bb61cff4e..face9164b4 100644 --- a/wp-admin/includes/file.php +++ b/wp-admin/includes/file.php @@ -270,7 +270,7 @@ function _wp_handle_upload( &$file, $overrides, $time, $action ) { // You may have had one or more 'wp_handle_upload_prefilter' functions error out the file. Handle that gracefully. if ( isset( $file['error'] ) && ! is_numeric( $file['error'] ) && $file['error'] ) { - return $upload_error_handler( $file, $file['error'] ); + return call_user_func_array( $upload_error_handler, array( &$file, $file['error'] ) ); } // Install user overrides. Did we mention that this voids your warranty? @@ -312,11 +312,11 @@ function _wp_handle_upload( &$file, $overrides, $time, $action ) { // A correct form post will pass this test. if ( $test_form && ( ! isset( $_POST['action'] ) || ( $_POST['action'] != $action ) ) ) { - return call_user_func( $upload_error_handler, $file, __( 'Invalid form submission.' ) ); + return call_user_func_array( $upload_error_handler, array( &$file, __( 'Invalid form submission.' ) ) ); } // A successful upload will pass this test. It makes no sense to override this one. if ( isset( $file['error'] ) && $file['error'] > 0 ) { - return call_user_func( $upload_error_handler, $file, $upload_error_strings[ $file['error'] ] ); + return call_user_func_array( $upload_error_handler, array( &$file, $upload_error_strings[ $file['error'] ] ) ); } $test_file_size = 'wp_handle_upload' === $action ? $file['size'] : filesize( $file['tmp_name'] ); @@ -327,13 +327,13 @@ function _wp_handle_upload( &$file, $overrides, $time, $action ) { } else { $error_msg = __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.' ); } - return call_user_func( $upload_error_handler, $file, $error_msg ); + return call_user_func_array( $upload_error_handler, array( &$file, $error_msg ) ); } // A properly uploaded file will pass this test. There should be no reason to override this one. $test_uploaded_file = 'wp_handle_upload' === $action ? @ is_uploaded_file( $file['tmp_name'] ) : @ is_file( $file['tmp_name'] ); if ( ! $test_uploaded_file ) { - return call_user_func( $upload_error_handler, $file, __( 'Specified file failed upload test.' ) ); + return call_user_func_array( $upload_error_handler, array( &$file, __( 'Specified file failed upload test.' ) ) ); } // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. @@ -348,7 +348,7 @@ function _wp_handle_upload( &$file, $overrides, $time, $action ) { $file['name'] = $proper_filename; } if ( ( ! $type || !$ext ) && ! current_user_can( 'unfiltered_upload' ) ) { - return call_user_func( $upload_error_handler, $file, __( 'Sorry, this file type is not permitted for security reasons.' ) ); + return call_user_func_array( $upload_error_handler, array( &$file, __( 'Sorry, this file type is not permitted for security reasons.' ) ) ); } if ( ! $type ) { $type = $file['type']; @@ -362,7 +362,7 @@ function _wp_handle_upload( &$file, $overrides, $time, $action ) { * overriding this one. */ if ( ! ( ( $uploads = wp_upload_dir( $time ) ) && false === $uploads['error'] ) ) { - return call_user_func( $upload_error_handler, $file, $uploads['error'] ); + return call_user_func_array( $upload_error_handler, array( &$file, $uploads['error'] ) ); } $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); diff --git a/wp-includes/version.php b/wp-includes/version.php index 471f2b5a61..68a0f2d3f1 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.7-alpha-38234'; +$wp_version = '4.7-alpha-38235'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.