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

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

commit f3d7215f8f50bfab0e14b2768f2b40ecce4ab36f
Author: Jürg Billeter <[email protected]>
AuthorDate: Fri Nov 29 11:57:33 2024 +0000

    _loader/loader.py: Add `None` checks for shallow loading
    
    When performing shallow loads without loading subprojects,
    `get_loader()` may return `None`. Add checks for that to fix crashes
    dereferencing `None`.
---
 src/buildstream/_loader/loader.py | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/buildstream/_loader/loader.py 
b/src/buildstream/_loader/loader.py
index f142b2655..66128fe7a 100644
--- a/src/buildstream/_loader/loader.py
+++ b/src/buildstream/_loader/loader.py
@@ -437,6 +437,11 @@ class Loader:
             link_target = element.link_target.as_str()  # pylint: 
disable=no-member
             _, filename, loader = self._parse_name(link_target, 
element.link_target, load_subprojects=load_subprojects)
 
+            if not loader:
+                # `loader` should never be None if `load_subprojects` is True
+                assert not load_subprojects
+                return None
+
             #
             # Redirect the loading of the file and it's dependencies to the 
appropriate loader,
             # which might or might not be the same loader.
@@ -465,6 +470,11 @@ class Loader:
 
         top_element = self._load_one_file(filename, provenance_node, 
load_subprojects=load_subprojects)
 
+        if not top_element:
+            # `top_element` should never be None if `load_subprojects` is True
+            assert not load_subprojects
+            return None
+
         # Already loaded dependencies for a fully loaded element, early return.
         #
         if top_element.fully_loaded:
@@ -773,6 +783,11 @@ class Loader:
             _, filename, loader = self._parse_name(
                 load_element.link_target.as_str(), load_element.link_target, 
load_subprojects=load_subprojects
             )
+            if not loader:
+                # `loader` should never be None if `load_subprojects` is True
+                assert not load_subprojects
+                return None
+
             return loader.get_loader(filename, load_element.link_target, 
load_subprojects=load_subprojects)
 
         # If we're only performing a lookup, we're done here.

Reply via email to