diff options
author | EA117 <admin@ea117.com> | 2019-08-28 20:22:33 -0500 |
---|---|---|
committer | EA117 <admin@ea117.com> | 2019-08-28 20:22:33 -0500 |
commit | 73537bcc7d8b10fe77e91068d494c1181b11d6c7 (patch) | |
tree | 7e8015bada1c89972c0a7be3d98baa2d11b9646c | |
parent | 4cdfb3f4eddb1c3ccaa304b1c8d3fade7e18f75e (diff) | |
download | forums-73537bcc7d8b10fe77e91068d494c1181b11d6c7.tar forums-73537bcc7d8b10fe77e91068d494c1181b11d6c7.tar.gz forums-73537bcc7d8b10fe77e91068d494c1181b11d6c7.tar.bz2 forums-73537bcc7d8b10fe77e91068d494c1181b11d6c7.tar.xz forums-73537bcc7d8b10fe77e91068d494c1181b11d6c7.zip |
[ticket/16141] plupload chunk_size incorrect when 'unlimited' is involved.
Change get_chunk_size() calculation to correctly calculate limits without
letting a zero "unlimited" value always win. Also ensure get_chunk_size()
can only return zero if all of the limits were in fact set to unlimited.
PHPBB3-16141
-rw-r--r-- | phpBB/phpbb/plupload/plupload.php | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/phpBB/phpbb/plupload/plupload.php b/phpBB/phpbb/plupload/plupload.php index ac4811e4ef..601b3fb440 100644 --- a/phpBB/phpbb/plupload/plupload.php +++ b/phpBB/phpbb/plupload/plupload.php @@ -276,8 +276,14 @@ class plupload } /** - * Checks various php.ini values and the maximum file size to determine - * the maximum size chunks a file can be split up into for upload + * Checks various php.ini values to determine the maximum chunk + * size a file should be split into for upload. + * + * The intention is to calculate a value which reflects whatever + * the most restrictive limit is set to. And to then set the chunk + * size to half that value, to ensure any required transfer overhead + * and POST data remains well within the limit. Or, if all of the + * limits are set to unlimited, the chunk size will also be unlimited. * * @return int */ @@ -285,48 +291,31 @@ class plupload { $max = 0; - $limit = $this->php_ini->getBytes('memory_limit'); - - // unlimited is -1 for memory_limit. 0 would be an invalid configuration. + // unlimited is -1 for memory_limit. 0 should be an invalid configuration. + $limit_memory = $this->php_ini->getBytes('memory_limit'); - if ($limit > 0) + if ($limit_memory > 0) { - $max = $limit; + $max = $limit_memory; } // For all remaining limits, 0 means "unlimited". - // For each limit, if there is a non-unlimited value to - // apply, apply the limit if it's less than whatever non- - // unlimited max value is currently set. Also, apply the - // limit if the current max value is otherwise unlimited. - - $limit = $this->php_ini->getBytes('upload_max_filesize'); + $limit_upload = $this->php_ini->getBytes('upload_max_filesize'); - if ($limit > 0) + if ($limit_upload > 0) { - $max = min($limit, max($max, $limit)); + $max = min($limit_upload, $max ? $max : $limit_upload); } - $limit = $this->php_ini->getBytes('post_max_size'); + $limit_post = $this->php_ini->getBytes('post_max_size'); - if ($limit > 0) + if ($limit_post > 0) { - $max = min($limit, max($max, $limit)); + $max = min($limit_post, $max ? $max : $limit_post); } - - $limit = $this->config['max_filesize']; - - if ($limit > 0) - { - $max = min($limit, max($max, $limit)); - } - - // Only if every limit was 0/unlimited will we still - // have a zero value in $max at this point. - - // Use half of the maximum possible to leave plenty of - // room for other POST data and be well under limits. + + // $config['max_filesize'] is not a limiter to chunk size. return floor($max / 2); } |