diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index 5b697777e47cd701f09c4d61d1d7c95dfcb9c8d1..b9eea2fea624fb8a720985e5f26c1295ecb64c3c 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -47,7 +47,7 @@ $totalSize = 0;
 foreach ($files['size'] as $size) {
 	$totalSize += $size;
 }
-if ($totalSize > $maxUploadFilesize) {
+if ($maxUploadFilesize >= 0 and $totalSize > $maxUploadFilesize) {
 	OCP\JSON::error(array('data' => array('message' => $l->t('Not enough storage available'),
 		'uploadMaxFilesize' => $maxUploadFilesize,
 		'maxHumanFilesize' => $maxHumanFilesize)));
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php
index d32e082ade9965f4c1331381424e1e9a3a5413cc..5c3a0cf93e1285d1fc353f10876a55a14d7f5f77 100644
--- a/lib/files/filesystem.php
+++ b/lib/files/filesystem.php
@@ -30,6 +30,7 @@
 namespace OC\Files;
 
 const FREE_SPACE_UNKNOWN = -2;
+const FREE_SPACE_UNLIMITED = -3;
 
 class Filesystem {
 	public static $loaded = false;
diff --git a/lib/helper.php b/lib/helper.php
index 41985ca57a71478889bfaef774858578746b725d..6ee8a4891647926fea9df98c9f29c00d2de2cb53 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -764,7 +764,13 @@ class OC_Helper {
 	public static function maxUploadFilesize($dir) {
 		$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
 		$post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
-		$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+		if ($upload_max_filesize === 0 and $post_max_size === 0) {
+			$maxUploadFilesize = \OC\Files\FREE_SPACE_UNLIMITED;
+		} elseif ($upload_max_filesize === 0 or $post_max_size === 0) {
+			$maxUploadFilesize = max($upload_max_filesize, $post_max_size); //only the non 0 value counts
+		} else {
+			$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+		}
 
 		$freeSpace = \OC\Files\Filesystem::free_space($dir);
 		if($freeSpace !== \OC\Files\FREE_SPACE_UNKNOWN){