aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2019-05-28 13:05:20 +0200
committerJulius Härtl <jus@bitgrid.net>2019-05-28 13:06:59 +0200
commit67dd4b018abde6523c283738411590cf85f5308d (patch)
tree8f6231fc86f96cc2ed7114fb67b5db3779ba3b75
parent8b6d8ed4231e0bedf25ee5d088b128e746584d08 (diff)
downloadnextcloud-server-67dd4b018abde6523c283738411590cf85f5308d.tar.gz
nextcloud-server-67dd4b018abde6523c283738411590cf85f5308d.zip
Check for free space on touch
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r--lib/private/Files/Node/Folder.php7
-rw-r--r--lib/private/Files/Storage/Wrapper/Quota.php10
-rw-r--r--tests/lib/Files/Storage/Wrapper/QuotaTest.php5
3 files changed, 19 insertions, 3 deletions
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index ebf67e47a21..1e9088a7c19 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/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');
}
/**
diff --git a/lib/private/Files/Storage/Wrapper/Quota.php b/lib/private/Files/Storage/Wrapper/Quota.php
index 4cbe9189593..492b5aba436 100644
--- a/lib/private/Files/Storage/Wrapper/Quota.php
+++ b/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);
+ }
+
}
diff --git a/tests/lib/Files/Storage/Wrapper/QuotaTest.php b/tests/lib/Files/Storage/Wrapper/QuotaTest.php
index adfd60d0532..0b80467fcc4 100644
--- a/tests/lib/Files/Storage/Wrapper/QuotaTest.php
+++ b/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'));
+ }
}