aboutsummaryrefslogtreecommitdiffstats
path: root/includes/api
diff options
context:
space:
mode:
authorTimo Tijhof <krinklemail@gmail.com>2020-04-30 03:33:31 +0100
committerAaron Schulz <aschulz@wikimedia.org>2020-05-05 01:58:15 +0000
commita339338ec31581af9abfa12ec09cec7adf0ae415 (patch)
tree0c7c13822320026ec1be36ea9c1606765658d1cc /includes/api
parentaedff87cd16ab8bb254fa39d102b24ce48f2f53a (diff)
downloadmediawikicore-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.php2
-rw-r--r--includes/api/ApiUpload.php29
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'] ) {