aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2014-05-03 11:49:38 +0200
committerMorris Jobke <hey@morrisjobke.de>2014-05-03 11:49:38 +0200
commit623161b9a92dacc54ce198e9f762c8760b73ca00 (patch)
treefec399a54168cfe7414d8ea591868a9600059bb4
parentcf20de185c95847810e6d0423d67f5bbc6506c2d (diff)
parent1245ff8f318fafd66eed1ba8f9f2b3755aa537ca (diff)
downloadnextcloud-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.php4
-rw-r--r--lib/private/helper.php26
-rw-r--r--tests/lib/helper.php22
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) {