This is an automated email from the ASF dual-hosted git repository. juergbi pushed a commit to branch jbilleter/checkout in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit c5cd0cbb2992e34463e2fa68aa517a412c5048b8 Author: Jürg Billeter <[email protected]> AuthorDate: Fri Oct 2 11:10:14 2026 +0200 _casbaseddirectory.py: Validate `Directory` node names The REAPI spec requires that every child in the directory must have a path of exactly one segment. Raise an error if a `Directory` message violates the spec. --- src/buildstream/storage/_casbaseddirectory.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/buildstream/storage/_casbaseddirectory.py b/src/buildstream/storage/_casbaseddirectory.py index 084ec0105..5898b80db 100644 --- a/src/buildstream/storage/_casbaseddirectory.py +++ b/src/buildstream/storage/_casbaseddirectory.py @@ -654,10 +654,12 @@ class CasBasedDirectory(Directory): self.__subtree_read_only = prop.value == "true" for dentry in pb2_directory.directories: + _validate_cas_node_name(dentry.name) self.__index[dentry.name] = _IndexEntry( self.__cas_cache, dentry.name, FileType.DIRECTORY, digest=dentry.digest ) for entry in pb2_directory.files: + _validate_cas_node_name(entry.name) mtime: Optional[timestamp_pb2.Timestamp] if entry.node_properties.HasField("mtime"): mtime = entry.node_properties.mtime @@ -673,6 +675,7 @@ class CasBasedDirectory(Directory): mtime=mtime, ) for lentry in pb2_directory.symlinks: + _validate_cas_node_name(lentry.name) self.__index[lentry.name] = _IndexEntry( self.__cas_cache, lentry.name, FileType.SYMLINK, target=lentry.target ) @@ -908,3 +911,17 @@ class CasBasedDirectory(Directory): subdir.__add_files_to_result(path_prefix=relative_pathname, result=result) else: result.files_written.append(relative_pathname) + + +# _validate_cas_node_name(): +# +# Validates that a CAS Directory entry name is a single path segment. +# +# Args: +# name (str): The name of a CAS Directory entry +# +def _validate_cas_node_name(name: str): + if os.path.basename(name) != name or name in (".", ".."): + raise DirectoryError( + f"Invalid name in a CAS Directory node: '{name}' (every child in the directory must have a path of exactly one segment)" + )
