From e87a7b5ac5b82f12ea703261cc2c1641fc7da5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Thu, 13 Oct 2016 12:59:10 +0200 Subject: [PATCH] Sanitize length headers when validating quota --- lib/private/connector/sabre/quotaplugin.php | 5 +++-- tests/lib/connector/sabre/quotaplugin.php | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/lib/private/connector/sabre/quotaplugin.php b/lib/private/connector/sabre/quotaplugin.php index 22b687b35089..7bc1221f87ab 100644 --- a/lib/private/connector/sabre/quotaplugin.php +++ b/lib/private/connector/sabre/quotaplugin.php @@ -114,12 +114,13 @@ public function checkQuota($uri, $data = null) { public function getLength() { $req = $this->server->httpRequest; $length = $req->getHeader('X-Expected-Entity-Length'); - if (!$length) { + if (!is_numeric($length)) { $length = $req->getHeader('Content-Length'); + $length = is_numeric($length) ? $length : null; } $ocLength = $req->getHeader('OC-Total-Length'); - if ($length && $ocLength) { + if (is_numeric($length) && is_numeric($ocLength)) { return max($length, $ocLength); } diff --git a/tests/lib/connector/sabre/quotaplugin.php b/tests/lib/connector/sabre/quotaplugin.php index 3d9cd9b5da0a..a2074a7f4466 100644 --- a/tests/lib/connector/sabre/quotaplugin.php +++ b/tests/lib/connector/sabre/quotaplugin.php @@ -80,13 +80,19 @@ public function quotaExceededProvider() { } public function lengthProvider() { - return array( - array(null, array()), - array(1024, array('X-EXPECTED-ENTITY-LENGTH' => '1024')), - array(512, array('CONTENT-LENGTH' => '512')), - array(2048, array('OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => '1024')), - array(4096, array('OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => '4096')), - ); + return [ + [null, []], + [1024, ['X-EXPECTED-ENTITY-LENGTH' => '1024']], + [512, ['CONTENT-LENGTH' => '512']], + [2048, ['OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => '1024']], + [4096, ['OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => '4096']], + [null, ['X-EXPECTED-ENTITY-LENGTH' => 'A']], + [null, ['CONTENT-LENGTH' => 'A']], + [1024, ['OC-TOTAL-LENGTH' => 'A', 'CONTENT-LENGTH' => '1024']], + [1024, ['OC-TOTAL-LENGTH' => 'A', 'X-EXPECTED-ENTITY-LENGTH' => '1024']], + [null, ['OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => 'A']], + [null, ['OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => 'A']], + ]; } private function buildFileViewMock($quota) {