@@ -184,6 +184,45 @@ def test_no_pyproject_skips(self, valid_adapter_cls: type, tmp_path: object) ->
184184 assert result .passed is True
185185 assert "skipping" in result .message .lower ()
186186
187+ def test_traversal_path_resolved_to_valid_dir (self , valid_adapter_cls : type , tmp_path : object ) -> None :
188+ """A path containing '..' that resolves to a real adapter dir still validates."""
189+ import pathlib
190+
191+ assert isinstance (tmp_path , pathlib .Path )
192+ adapter_dir = tmp_path / "adapter"
193+ adapter_dir .mkdir ()
194+ pyproject = adapter_dir / "pyproject.toml"
195+ qualname = f"{ valid_adapter_cls .__module__ } :{ valid_adapter_cls .__qualname__ } "
196+ pyproject .write_text (f'[project.entry-points."agent_assembly.adapters"]\n ' f'test_framework = "{ qualname } "\n ' )
197+ # "<tmp>/adapter/../adapter" canonicalizes back to "<tmp>/adapter".
198+ traversal = str (adapter_dir / ".." / "adapter" )
199+ result = _check_entry_point_metadata (valid_adapter_cls , traversal )
200+ assert result .passed is True
201+
202+ def test_symlinked_pyproject_outside_dir_rejected (self , valid_adapter_cls : type , tmp_path : object ) -> None :
203+ """A pyproject.toml symlink escaping the adapter dir is refused, not read."""
204+ import pathlib
205+
206+ assert isinstance (tmp_path , pathlib .Path )
207+ outside = tmp_path / "outside"
208+ outside .mkdir ()
209+ secret = outside / "pyproject.toml"
210+ secret .write_text ("[project]\n name = 'secret'\n " )
211+
212+ adapter_dir = tmp_path / "adapter"
213+ adapter_dir .mkdir ()
214+ link = adapter_dir / "pyproject.toml"
215+ try :
216+ link .symlink_to (secret )
217+ except (OSError , NotImplementedError ):
218+ import pytest
219+
220+ pytest .skip ("platform does not support symlinks" )
221+
222+ result = _check_entry_point_metadata (valid_adapter_cls , str (adapter_dir ))
223+ assert result .passed is False
224+ assert "outside the adapter directory" in result .message
225+
187226
188227class TestValidateAdapter :
189228 """Tests for validate_adapter orchestrator."""
0 commit comments