Merge pull request #56984 from nextcloud/backport/56982/stable31

[stable31] fix(comments): Check comment object
This commit is contained in:
Arthur Schiwon 2025-12-11 09:38:37 +01:00 committed by GitHub
commit 5d5cbbfd5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 43 additions and 9 deletions

View file

@ -77,6 +77,10 @@ class EntityCollection extends RootCollection implements IProperties {
public function getChild($name) {
try {
$comment = $this->commentsManager->get($name);
if ($comment->getObjectType() !== $this->name
|| $comment->getObjectId() !== $this->id) {
throw new NotFound();
}
return new CommentNode(
$this->commentsManager,
$comment,
@ -130,8 +134,9 @@ class EntityCollection extends RootCollection implements IProperties {
*/
public function childExists($name) {
try {
$this->commentsManager->get($name);
return true;
$comment = $this->commentsManager->get($name);
return $comment->getObjectType() === $this->name
&& $comment->getObjectId() === $this->id;
} catch (NotFoundException $e) {
return false;
}

View file

@ -60,14 +60,16 @@ class EntityCollectionTest extends \Test\TestCase {
}
public function testGetChild(): void {
$comment = $this->createMock(IComment::class);
$comment->method('getObjectType')
->willReturn('files');
$comment->method('getObjectId')
->willReturn('19');
$this->commentsManager->expects($this->once())
->method('get')
->with('55')
->willReturn(
$this->getMockBuilder(IComment::class)
->disableOriginalConstructor()
->getMock()
);
->willReturn($comment);
$node = $this->collection->getChild('55');
$this->assertTrue($node instanceof CommentNode);
@ -119,6 +121,17 @@ class EntityCollectionTest extends \Test\TestCase {
}
public function testChildExistsTrue(): void {
$comment = $this->createMock(IComment::class);
$comment->method('getObjectType')
->willReturn('files');
$comment->method('getObjectId')
->willReturn('19');
$this->commentsManager->expects($this->once())
->method('get')
->with('44')
->willReturn($comment);
$this->assertTrue($this->collection->childExists('44'));
}

View file

@ -1117,6 +1117,10 @@ class QueryBuilder implements IQueryBuilder {
* @return $this This QueryBuilder instance.
*/
public function orderBy($sort, $order = null) {
if ($order !== null && !in_array(strtoupper((string)$order), ['ASC', 'DESC'], true)) {
$order = null;
}
$this->queryBuilder->orderBy(
$this->helper->quoteColumnName($sort),
$order
@ -1134,6 +1138,10 @@ class QueryBuilder implements IQueryBuilder {
* @return $this This QueryBuilder instance.
*/
public function addOrderBy($sort, $order = null) {
if ($order !== null && !in_array(strtoupper((string)$order), ['ASC', 'DESC'], true)) {
$order = null;
}
$this->queryBuilder->addOrderBy(
$this->helper->quoteColumnName($sort),
$order

View file

@ -276,13 +276,21 @@ class ShardedQueryBuilder extends ExtendedQueryBuilder {
}
public function addOrderBy($sort, $order = null) {
$this->registerOrder((string)$sort, (string)$order ?? 'ASC');
if ($order !== null && !in_array(strtoupper((string)$order), ['ASC', 'DESC'], true)) {
$order = null;
}
$this->registerOrder((string)$sort, (string)($order ?? 'ASC'));
return parent::addOrderBy($sort, $order);
}
public function orderBy($sort, $order = null) {
if ($order !== null && !in_array(strtoupper((string)$order), ['ASC', 'DESC'], true)) {
$order = null;
}
$this->sortList = [];
$this->registerOrder((string)$sort, (string)$order ?? 'ASC');
$this->registerOrder((string)$sort, (string)($order ?? 'ASC'));
return parent::orderBy($sort, $order);
}