From f2cdc4f47d9136b54159557136dad892dcd31ec2 Mon Sep 17 00:00:00 2001 From: Côme Chilliet Date: Tue, 13 Dec 2022 09:29:07 +0100 Subject: Fix crash in OCS when getting info about an application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- lib/private/AppFramework/OCS/BaseResponse.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'lib/private/AppFramework/OCS/BaseResponse.php') diff --git a/lib/private/AppFramework/OCS/BaseResponse.php b/lib/private/AppFramework/OCS/BaseResponse.php index dbff1b846c1..f9577a7a5f2 100644 --- a/lib/private/AppFramework/OCS/BaseResponse.php +++ b/lib/private/AppFramework/OCS/BaseResponse.php @@ -37,13 +37,13 @@ abstract class BaseResponse extends Response { /** @var string */ protected $format; - /** @var string */ + /** @var ?string */ protected $statusMessage; - /** @var int */ + /** @var ?int */ protected $itemsCount; - /** @var int */ + /** @var ?int */ protected $itemsPerPage; /** @@ -125,12 +125,15 @@ abstract class BaseResponse extends Response { return $writer->outputMemory(true); } - /** - * @param array $array - * @param \XMLWriter $writer - */ - protected function toXML(array $array, \XMLWriter $writer) { + protected function toXML(array $array, \XMLWriter $writer): void { foreach ($array as $k => $v) { + if ($k === '@attributes' && is_array($v)) { + foreach ($v as $k2 => $v2) { + $writer->writeAttribute($k2, $v2); + } + continue; + } + if (\is_string($k) && strpos($k, '@') === 0) { $writer->writeAttribute(substr($k, 1), $v); continue; -- cgit v1.2.3 From 2a5e18b67af256ec545ceece8ac49ca2133e764f Mon Sep 17 00:00:00 2001 From: Côme Chilliet Date: Mon, 19 Dec 2022 14:53:54 +0100 Subject: Fix types in OCS json answer (status code is an int) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- lib/private/AppFramework/OCS/BaseResponse.php | 2 +- lib/private/AppFramework/OCS/V1Response.php | 3 +-- lib/private/AppFramework/OCS/V2Response.php | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) (limited to 'lib/private/AppFramework/OCS/BaseResponse.php') diff --git a/lib/private/AppFramework/OCS/BaseResponse.php b/lib/private/AppFramework/OCS/BaseResponse.php index f9577a7a5f2..d3904065102 100644 --- a/lib/private/AppFramework/OCS/BaseResponse.php +++ b/lib/private/AppFramework/OCS/BaseResponse.php @@ -92,7 +92,7 @@ abstract class BaseResponse extends Response { } /** - * @param string[] $meta + * @param array $meta * @return string */ protected function renderResult(array $meta): string { diff --git a/lib/private/AppFramework/OCS/V1Response.php b/lib/private/AppFramework/OCS/V1Response.php index 8c402809cc4..cca3c267ec4 100644 --- a/lib/private/AppFramework/OCS/V1Response.php +++ b/lib/private/AppFramework/OCS/V1Response.php @@ -28,7 +28,6 @@ use OCP\AppFramework\Http; use OCP\AppFramework\OCSController; class V1Response extends BaseResponse { - /** * The V1 endpoint has very limited http status codes basically everything * is status 200 except 401 @@ -68,7 +67,7 @@ class V1Response extends BaseResponse { public function render() { $meta = [ 'status' => $this->getOCSStatus() === 100 ? 'ok' : 'failure', - 'statuscode' => (string)$this->getOCSStatus(), + 'statuscode' => $this->getOCSStatus(), 'message' => $this->getOCSStatus() === 100 ? 'OK' : $this->statusMessage ?? '', 'totalitems' => (string)($this->itemsCount ?? ''), 'itemsperpage' => (string)($this->itemsPerPage ?? ''), diff --git a/lib/private/AppFramework/OCS/V2Response.php b/lib/private/AppFramework/OCS/V2Response.php index 6c302698bc9..8bf4c37a578 100644 --- a/lib/private/AppFramework/OCS/V2Response.php +++ b/lib/private/AppFramework/OCS/V2Response.php @@ -27,7 +27,6 @@ use OCP\AppFramework\Http; use OCP\AppFramework\OCSController; class V2Response extends BaseResponse { - /** * The V2 endpoint just passes on status codes. * Of course we have to map the OCS specific codes to proper HTTP status codes @@ -61,7 +60,7 @@ class V2Response extends BaseResponse { $meta = [ 'status' => $status >= 200 && $status < 300 ? 'ok' : 'failure', 'statuscode' => $this->getOCSStatus(), - 'message' => $status >= 200 && $status < 300 ? 'OK' : $this->statusMessage, + 'message' => $status >= 200 && $status < 300 ? 'OK' : $this->statusMessage ?? '', ]; if ($this->itemsCount !== null) { -- cgit v1.2.3