diff --git a/src/cleveragents/skills/builtins/file_ops.py b/src/cleveragents/skills/builtins/file_ops.py index 035994e74..b70086262 100644 --- a/src/cleveragents/skills/builtins/file_ops.py +++ b/src/cleveragents/skills/builtins/file_ops.py @@ -77,8 +77,12 @@ def validate_sandbox_path(path_str: str, sandbox_root: str | None = None) -> Pat root = root.resolve() target = (root / path_str).resolve() - if not str(target).startswith(str(root)): - raise ValueError(f"Path traversal detected: '{path_str}' escapes sandbox root") + try: + target.relative_to(root) + except ValueError as exc: + raise ValueError( + f"Path traversal detected: '{path_str}' escapes sandbox root", + ) from exc return target