fix(gateway): support Windows absolute paths in MEDIA tag regex and extract_local_files (#34632)
The MEDIA_TAG_CLEANUP_RE and extract_local_files path regex both used (?:~/|/) to anchor paths, which only matches Unix-style absolute and home-relative paths. Two additional _TOOL_MEDIA_RE patterns in run.py had the same limitation. Windows absolute paths (C:\Users\..., D:/...) were silently ignored, causing MEDIA directive delivery to fail. Add [A-Za-z]:[/\\] as a third anchor alternative in all four regex locations (base.py x2, run.py x2). Also update path separators in extract_local_files from / to [/\\] so it can traverse Windows directory trees. Revert accidental + quantifier in MEDIA_TAG_CLEANUP_RE lookahead that changed match-one to match-one-or-more (unrelated to fix). Fixes: #34632
This commit is contained in:
@@ -361,6 +361,45 @@ class TestExtractMedia:
|
||||
assert "[[audio_as_voice]]" not in cleaned
|
||||
assert "[[as_document]]" not in cleaned
|
||||
|
||||
# Windows path support — regression coverage for #34632
|
||||
|
||||
def test_media_tag_windows_backslash_path(self):
|
||||
"""extract_media should recognise Windows backslash paths."""
|
||||
media, cleaned = BasePlatformAdapter.extract_media(
|
||||
r"MEDIA:C:\Users\kotsu\file.pdf"
|
||||
)
|
||||
assert len(media) == 1
|
||||
assert media[0][0].endswith("file.pdf")
|
||||
|
||||
def test_media_tag_windows_forward_slash_path(self):
|
||||
"""extract_media should recognise Windows forward-slash paths."""
|
||||
media, cleaned = BasePlatformAdapter.extract_media(
|
||||
"MEDIA:C:/Users/kotsu/file.pdf"
|
||||
)
|
||||
assert len(media) == 1
|
||||
assert media[0][0].endswith("file.pdf")
|
||||
|
||||
def test_media_tag_windows_drive_root(self):
|
||||
"""extract_media should recognise a path at the drive root."""
|
||||
media, cleaned = BasePlatformAdapter.extract_media(
|
||||
r"MEDIA:D:\report.md"
|
||||
)
|
||||
assert len(media) == 1
|
||||
assert media[0][0].endswith("report.md")
|
||||
|
||||
def test_media_tag_unix_paths_still_work(self):
|
||||
"""Unix absolute and tilde paths must still extract after Windows change."""
|
||||
for content in ["MEDIA:/tmp/audio.ogg", r"MEDIA:~/docs/notes.md"]:
|
||||
media, _ = BasePlatformAdapter.extract_media(content)
|
||||
assert len(media) == 1, f"Failed for: {content}"
|
||||
|
||||
def test_relative_path_still_ignored(self):
|
||||
"""Relative Windows-style paths (no drive letter) must not match."""
|
||||
media, _ = BasePlatformAdapter.extract_media(
|
||||
r"MEDIA:Users\kotsu\file.pdf"
|
||||
)
|
||||
assert media == []
|
||||
|
||||
|
||||
class TestMediaExtensionAllowlistParity:
|
||||
"""Regression coverage for issue #34517 — the MEDIA: extension black hole.
|
||||
|
||||
Reference in New Issue
Block a user