summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-08-14 15:18:49 +0200
committerVincent Petry <pvince81@owncloud.com>2014-08-20 21:56:09 +0200
commitc6e87acb96dc51ff06be6e2471adb6991d4136d5 (patch)
treef4a6a7121a3a0e57e9819e7bac9810668c8a4537
parent899035bfd3f047b374f2c50356f46794767a553f (diff)
downloadnextcloud-server-c6e87acb96dc51ff06be6e2471adb6991d4136d5.tar.gz
nextcloud-server-c6e87acb96dc51ff06be6e2471adb6991d4136d5.zip
Return whole file if range request cannot be granted due to encryption
Whenenver range headers are set and encryption is enabled, it is not possible to automatically fseek() to the proper position. To avoid returning corrupt/invalid data or causing a decryption error, the range headers are stripped so that the SabreDAV code in httpGet() returns the whole file. Backport of cc8c1d8e0776bda7f4c7c28e11984144a4861df3 from master
-rw-r--r--lib/private/connector/sabre/server.php22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/private/connector/sabre/server.php b/lib/private/connector/sabre/server.php
index aaf4fe85af9..43c3464f1ca 100644
--- a/lib/private/connector/sabre/server.php
+++ b/lib/private/connector/sabre/server.php
@@ -33,6 +33,11 @@ class OC_Connector_Sabre_Server extends Sabre\DAV\Server {
*/
private $overLoadedUri = null;
+ /**
+ * @var boolean
+ */
+ private $ignoreRangeHeader = false;
+
public function getRequestUri() {
if (!is_null($this->overLoadedUri)) {
@@ -59,6 +64,23 @@ class OC_Connector_Sabre_Server extends Sabre\DAV\Server {
return $result;
}
+ public function getHTTPRange() {
+ if ($this->ignoreRangeHeader) {
+ return null;
+ }
+ return parent::getHTTPRange();
+ }
+
+ protected function httpGet($uri) {
+ $range = $this->getHTTPRange();
+
+ if (OC_App::isEnabled('files_encryption') && $range) {
+ // encryption does not support range requests
+ $this->ignoreRangeHeader = true;
+ }
+ return parent::httpGet($uri);
+ }
+
/**
* @see \Sabre\DAV\Server
*/