This repository has been archived on 2026-10-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
recoll-modern/tests/security/test_paths.py
T

30 lines
869 B
Python

"""Containment is rechecked when serving a document."""
from pathlib import Path
from typing import cast
from fastapi import FastAPI
from fastapi.testclient import TestClient
from recoll_modern.indexing.discovery import ObservedFile
def test_swapped_symlink_cannot_escape_document_root(
authenticated: tuple[TestClient, str], tmp_path: Path
) -> None:
client, _ = authenticated
root = tmp_path / "docs"
path = root / "file.txt"
path.write_text("safe")
digest = "a" * 64
cast(FastAPI, client.app).state.documents.observe_files([
ObservedFile("file.txt", digest, 4)
])
outside = tmp_path / "secret.txt"
outside.write_text("secret")
path.unlink()
path.symlink_to(outside)
response = client.get(f"/documents/{digest}/file")
assert response.status_code == 410
assert b"secret" not in response.content