diff options
author | Timo Tijhof <krinklemail@gmail.com> | 2020-04-30 03:33:31 +0100 |
---|---|---|
committer | Aaron Schulz <aschulz@wikimedia.org> | 2020-05-05 01:58:15 +0000 |
commit | a339338ec31581af9abfa12ec09cec7adf0ae415 (patch) | |
tree | 0c7c13822320026ec1be36ea9c1606765658d1cc /includes/api | |
parent | aedff87cd16ab8bb254fa39d102b24ce48f2f53a (diff) | |
download | mediawikicore-a339338ec31581af9abfa12ec09cec7adf0ae415.tar.gz mediawikicore-a339338ec31581af9abfa12ec09cec7adf0ae415.zip |
upload: Move MinUploadChunkSize logic from Setup.php to ApiUpload
This was previously making calls to various methods during the
Setup.php, which apart from being deferrable logic that isn't
needed on most requests, is also risky/complicated because MW
isn't initialised yet at this point.
Bug: T189966
Change-Id: Iaee3f2af8d18bc5095e9297cbe1b6efc627f3977
Diffstat (limited to 'includes/api')
-rw-r--r-- | includes/api/ApiQuerySiteinfo.php | 2 | ||||
-rw-r--r-- | includes/api/ApiUpload.php | 29 |
2 files changed, 29 insertions, 2 deletions
diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index 3425a45a2336..827e090c9cc8 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -244,7 +244,7 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data['uploadsenabled'] = UploadBase::isEnabled(); $data['maxuploadsize'] = UploadBase::getMaxUploadSize(); - $data['minuploadchunksize'] = (int)$config->get( 'MinUploadChunkSize' ); + $data['minuploadchunksize'] = ApiUpload::getMinUploadChunkSize( $config ); $data['galleryoptions'] = $config->get( 'GalleryOptions' ); diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index 47b114e296e2..4e44f6161751 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -182,6 +182,33 @@ class ApiUpload extends ApiBase { } /** + * @since 1.35 + * @see $wgMinUploadChunkSize + * @param Config $config Site configuration for MinUploadChunkSize + * @return int + */ + public static function getMinUploadChunkSize( Config $config ) { + $configured = $config->get( 'MinUploadChunkSize' ); + + // Leave some room for other POST parameters + $postMax = ( + wfShorthandToInteger( + ini_get( 'post_max_size' ), + PHP_INT_MAX + ) ?: PHP_INT_MAX + ) - 1024; + + // Ensure the minimum chunk size is less than PHP upload limits + // or the maximum upload size. + return min( + $configured, + UploadBase::getMaxUploadSize( 'file' ), + UploadBase::getMaxPhpUploadSize(), + $postMax + ); + } + + /** * Get the result of a chunk upload. * @param array $warnings Array of Api upload warnings * @return array @@ -197,7 +224,7 @@ class ApiUpload extends ApiBase { $chunkPath = $request->getFileTempname( 'chunk' ); $chunkSize = $request->getUpload( 'chunk' )->getSize(); $totalSoFar = $this->mParams['offset'] + $chunkSize; - $minChunkSize = $this->getConfig()->get( 'MinUploadChunkSize' ); + $minChunkSize = self::getMinUploadChunkSize( $this->getConfig() ); // Sanity check sizing if ( $totalSoFar > $this->mParams['filesize'] ) { |