diff options
author | Morris Jobke <hey@morrisjobke.de> | 2014-05-03 11:49:38 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2014-05-03 11:49:38 +0200 |
commit | 623161b9a92dacc54ce198e9f762c8760b73ca00 (patch) | |
tree | fec399a54168cfe7414d8ea591868a9600059bb4 | |
parent | cf20de185c95847810e6d0423d67f5bbc6506c2d (diff) | |
parent | 1245ff8f318fafd66eed1ba8f9f2b3755aa537ca (diff) | |
download | nextcloud-server-623161b9a92dacc54ce198e9f762c8760b73ca00.tar.gz nextcloud-server-623161b9a92dacc54ce198e9f762c8760b73ca00.zip |
Merge pull request #8023 from flyser/master
Fix setting the max-upload-size for really large values.
-rw-r--r-- | lib/private/files.php | 4 | ||||
-rw-r--r-- | lib/private/helper.php | 26 | ||||
-rw-r--r-- | tests/lib/helper.php | 22 |
3 files changed, 49 insertions, 3 deletions
diff --git a/lib/private/files.php b/lib/private/files.php index 152595ba697..3affcf10449 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -279,9 +279,7 @@ class OC_Files { return false; $size -= 1; } else { - $size = OC_Helper::humanFileSize($size); - $size = substr($size, 0, -1); //strip the B - $size = str_replace(' ', '', $size); //remove the space between the size and the postfix + $size = OC_Helper::phpFileSize($size); } //don't allow user to break his config -- broken or malicious size input diff --git a/lib/private/helper.php b/lib/private/helper.php index ab1e0d38924..4058ec199a7 100644 --- a/lib/private/helper.php +++ b/lib/private/helper.php @@ -306,6 +306,32 @@ class OC_Helper { } /** + * @brief Make a php file size + * @param int $bytes file size in bytes + * @return string a php parseable file size + * + * Makes 2048 to 2k and 2^41 to 2048G + */ + public static function phpFileSize($bytes) { + if ($bytes < 0) { + return "?"; + } + if ($bytes < 1024) { + return $bytes . "B"; + } + $bytes = round($bytes / 1024, 1); + if ($bytes < 1024) { + return $bytes . "K"; + } + $bytes = round($bytes / 1024, 1); + if ($bytes < 1024) { + return $bytes . "M"; + } + $bytes = round($bytes / 1024, 1); + return $bytes . "G"; + } + + /** * @brief Make a computer file size * @param string $str file size in human readable format * @return int a file size in bytes diff --git a/tests/lib/helper.php b/tests/lib/helper.php index 5d319e40f02..4aef4669cb3 100644 --- a/tests/lib/helper.php +++ b/tests/lib/helper.php @@ -31,6 +31,28 @@ class Test_Helper extends PHPUnit_Framework_TestCase { } /** + * @dataProvider phpFileSizeProvider + */ + public function testPhpFileSize($expected, $input) + { + $result = OC_Helper::phpFileSize($input); + $this->assertEquals($expected, $result); + } + + public function phpFileSizeProvider() + { + return array( + array('0B', 0), + array('1K', 1024), + array('9.5M', 10000000), + array('1.3G', 1395864371), + array('465.7G', 500000000000), + array('465661.3G', 500000000000000), + array('465661287.3G', 500000000000000000), + ); + } + + /** * @dataProvider computerFileSizeProvider */ function testComputerFileSize($expected, $input) { |