fix(webdav): harden offset/key truthiness and escape SEARCH mime type
Optional review hardening on #849 (non-blocking nits from the approve): - `_build_search_xml`: emit `<d:firstresult>` on `offset is not None` rather than truthiness, so a future explicit offset=0 isn't silently dropped. - `_key`: key on `file_id is not None` so a (hypothetical) file_id of 0 isn't treated as absent and mis-keyed onto path. - `_type_search_args`: XML-escape the MIME type before interpolating it into the SEARCH literal (defense-in-depth for any future user-supplied value), with a unit test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
eaa898e6eb
commit
9452057570
@@ -164,6 +164,17 @@ async def test_find_all_by_type_delegates_to_search_files_all(mocker):
|
||||
assert "application/pdf" in kwargs["where_conditions"]
|
||||
|
||||
|
||||
def test_type_search_args_escapes_mime_type(mocker):
|
||||
"""A MIME value with XML metacharacters must not break / inject into the SEARCH."""
|
||||
client = _make_client(mocker)
|
||||
where, properties = client._type_search_args("application/pdf<&>")
|
||||
# The injected metacharacters are escaped inside the <d:literal>, so they
|
||||
# can't break the SEARCH XML or introduce new elements.
|
||||
assert "pdf<&>" in where
|
||||
assert "pdf<&>" not in where
|
||||
assert "fileid" in properties
|
||||
|
||||
|
||||
def test_build_search_xml_emits_offset_only_when_set(mocker):
|
||||
client = _make_client(mocker)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user