Browse Source

Check for free space on touch

Signed-off-by: Julius Härtl <jus@bitgrid.net>
Julius Härtl 4 years ago
parent
commit
91bc8ba2cd

+ 4 - 3
lib/private/Files/Node/Folder.php

@@ -181,14 +181,15 @@ class Folder extends Node implements \OCP\Files\Folder {
 			$nonExisting = new NonExistingFile($this->root, $this->view, $fullPath);
 			$this->root->emit('\OC\Files', 'preWrite', array($nonExisting));
 			$this->root->emit('\OC\Files', 'preCreate', array($nonExisting));
-			$this->view->touch($fullPath);
+			if (!$this->view->touch($fullPath)) {
+				throw new NotPermittedException('Could not create path');
+			}
 			$node = new File($this->root, $this->view, $fullPath);
 			$this->root->emit('\OC\Files', 'postWrite', array($node));
 			$this->root->emit('\OC\Files', 'postCreate', array($node));
 			return $node;
-		} else {
-			throw new NotPermittedException('No create permission for path');
 		}
+		throw new NotPermittedException('No create permission for path');
 	}
 
 	/**

+ 10 - 0
lib/private/Files/Storage/Wrapper/Quota.php

@@ -209,4 +209,14 @@ class Quota extends Wrapper {
 
 		return parent::mkdir($path);
 	}
+
+	public function touch($path, $mtime = null) {
+		$free = $this->free_space($path);
+		if ($free === 0.0) {
+			return false;
+		}
+
+		return parent::touch($path, $mtime);
+	}
+
 }

+ 5 - 0
tests/lib/Files/Storage/Wrapper/QuotaTest.php

@@ -213,4 +213,9 @@ class QuotaTest extends \Test\Files\Storage\Storage {
 		$instance = $this->getLimitedStorage(0.0);
 		$this->assertFalse($instance->mkdir('foobar'));
 	}
+
+	public function testNoTouchQuotaZero() {
+		$instance = $this->getLimitedStorage(0.0);
+		$this->assertFalse($instance->touch('foobar'));
+	}
 }