Add test case for !$reader->read then break

This commit is contained in:
Daniel Kesselberg 2019-11-06 17:01:22 +01:00
commit 1ee911ba45
3 changed files with 38 additions and 3 deletions

View file

@ -81,9 +81,9 @@ class Operator implements XmlDeserializable {
$operator->arguments[] = $argument['value']; $operator->arguments[] = $argument['value'];
} }
} else { } else {
if (!$reader->read()) { if (!$reader->read()) {
break; break;
} }
} }
} while ($reader->nodeType !== Reader::END_ELEMENT); } while ($reader->nodeType !== Reader::END_ELEMENT);

View file

@ -177,4 +177,17 @@ class QueryParserTest extends TestCase {
new Order('{DAV:}getcontentlength', \SearchDAV\Query\Order::ASC) new Order('{DAV:}getcontentlength', \SearchDAV\Query\Order::ASC)
], $search->orderBy); ], $search->orderBy);
} }
/**
* @expectedException \Sabre\Xml\LibXMLException
* @expectedExceptionMessage Opening and ending tag mismatch: prop line 17 and gt
* on line 19, column 20
*
* @throws \Sabre\Xml\ParseException
*/
public function testParseWhereBroken()
{
$query = file_get_contents(__DIR__ . '/invalidwherebroken.xml');
(new QueryParser())->parse($query, null, $rootElementName);
}
} }

View file

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<d:searchrequest xmlns:d="DAV:" xmlns:oc="http://ns.nextcloud.com">
<d:basicsearch>
<d:select>
<d:prop>
<d:getcontentlength/>
</d:prop>
</d:select>
<d:from>
<d:scope>
<d:href>/container1/</d:href>
<d:depth>infinity</d:depth>
</d:scope>
</d:from>
<d:where>
<d:gt>
<d:prop>
<d:literal>5</d:literal>
</d:gt>
</d:where>
</d:basicsearch>
</d:searchrequest>