This is an automated email from the ASF dual-hosted git repository.

juergbi pushed a commit to branch jbilleter/remoteasset
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 0cea83a8b803ea062e16b2ae0ba95d581f534757
Author: Jürg Billeter <[email protected]>
AuthorDate: Fri Nov 14 09:41:19 2025 +0100

    _artifactcache.py: Fix presence checks of protobuf digest fields
    
    Python truth values can't be used for presence checks of embedded
    protobuf message fields. Use `HasField()` instead. This prevents passing
    invalid digests to the Remote Asset server.
    
    Fixes #2090.
---
 src/buildstream/_artifactcache.py | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/buildstream/_artifactcache.py 
b/src/buildstream/_artifactcache.py
index 9f4062449..aef3f00dd 100644
--- a/src/buildstream/_artifactcache.py
+++ b/src/buildstream/_artifactcache.py
@@ -288,28 +288,28 @@ class ArtifactCache(AssetCache):
         artifact_proto = artifact._get_proto()
 
         try:
-            if str(artifact_proto.files):
+            if artifact_proto.HasField("files"):
                 self.cas._send_directory(remote, artifact_proto.files)
 
-            if str(artifact_proto.buildtree):
+            if artifact_proto.HasField("buildtree"):
                 try:
                     self.cas._send_directory(remote, artifact_proto.buildtree)
                 except FileNotFoundError:
                     pass
 
-            if str(artifact_proto.buildroot):
+            if artifact_proto.HasField("buildroot"):
                 try:
                     self.cas._send_directory(remote, artifact_proto.buildroot)
                 except FileNotFoundError:
                     pass
 
-            if artifact_proto.buildsandbox:
+            if artifact_proto.HasField("buildsandbox"):
                 for subsandbox_digest in 
artifact_proto.buildsandbox.subsandbox_digests:
                     self.cas._send_directory(remote, subsandbox_digest)
 
             digests = [artifact_digest, artifact_proto.low_diversity_meta, 
artifact_proto.high_diversity_meta]
 
-            if str(artifact_proto.public_data):
+            if artifact_proto.HasField("public_data"):
                 digests.append(artifact_proto.public_data)
 
             for log_file in artifact_proto.logs:
@@ -357,15 +357,15 @@ class ArtifactCache(AssetCache):
             raise ArtifactError("{}".format(e), temporary=True) from e
 
         referenced_directories = []
-        if artifact_proto.files:
+        if artifact_proto.HasField("files"):
             referenced_directories.append(artifact_proto.files)
-        if artifact_proto.buildtree:
+        if artifact_proto.HasField("buildtree"):
             referenced_directories.append(artifact_proto.buildtree)
-        if artifact_proto.sources:
+        if artifact_proto.HasField("sources"):
             referenced_directories.append(artifact_proto.sources)
-        if artifact_proto.buildroot:
+        if artifact_proto.HasField("buildroot"):
             referenced_directories.append(artifact_proto.buildroot)
-        if artifact_proto.buildsandbox:
+        if artifact_proto.HasField("buildsandbox"):
             for subsandbox_digest in 
artifact_proto.buildsandbox.subsandbox_digests:
                 referenced_directories.append(subsandbox_digest)
 
@@ -418,20 +418,20 @@ class ArtifactCache(AssetCache):
             with utils.save_file_atomic(artifact_path, mode="wb") as f:
                 f.write(artifact.SerializeToString())
 
-            if str(artifact.files):
+            if artifact.HasField("files"):
                 self.cas.fetch_directory(remote, artifact.files)
 
             if pull_buildtrees:
-                if str(artifact.buildtree):
+                if artifact.HasField("buildtree"):
                     self.cas.fetch_directory(remote, artifact.buildtree)
-                if str(artifact.buildroot):
+                if artifact.HasField("buildroot"):
                     self.cas.fetch_directory(remote, artifact.buildroot)
-                if artifact.buildsandbox:
+                if artifact.HasField("buildsandbox"):
                     for subsandbox_digest in 
artifact.buildsandbox.subsandbox_digests:
                         self.cas.fetch_directory(remote, subsandbox_digest)
 
             digests = [artifact.low_diversity_meta, 
artifact.high_diversity_meta]
-            if str(artifact.public_data):
+            if artifact.HasField("public_data"):
                 digests.append(artifact.public_data)
 
             for log_digest in artifact.logs:

Reply via email to