From 3ce9f0013af721ad1f57d35a2e9bf97ea0135d0c Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 28 Oct 2019 21:56:05 +0100 Subject: [PATCH] Fix DAV mimetype search Fixes #15048 Catches the case where a full mimetype is sumbitted in the where like clause. Before we didn't catch this and it was just forwarded as is causing invalid queries. Signed-off-by: Roeland Jago Douma --- lib/private/Files/Cache/QuerySearchHelper.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index ac64ba5c59..2d9d8f374f 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -136,16 +136,19 @@ class QuerySearchHelper { $type = $operator->getType(); if ($field === 'mimetype') { if ($operator->getType() === ISearchComparison::COMPARE_EQUAL) { - $value = $this->mimetypeLoader->getId($value); + $value = (int)$this->mimetypeLoader->getId($value); } else if ($operator->getType() === ISearchComparison::COMPARE_LIKE) { // transform "mimetype='foo/%'" to "mimepart='foo'" if (preg_match('|(.+)/%|', $value, $matches)) { $field = 'mimepart'; - $value = $this->mimetypeLoader->getId($matches[1]); + $value = (int)$this->mimetypeLoader->getId($matches[1]); $type = ISearchComparison::COMPARE_EQUAL; - } - if (strpos($value, '%') !== false) { + } else if (strpos($value, '%') !== false) { throw new \InvalidArgumentException('Unsupported query value for mimetype: ' . $value . ', only values in the format "mime/type" or "mime/%" are supported'); + } else { + $field = 'mimetype'; + $value = (int)$this->mimetypeLoader->getId($value); + $type = ISearchComparison::COMPARE_EQUAL; } } } else if ($field === 'favorite') {