diff --git a/scripts/addons_core/bl_pkg/bl_extension_utils.py b/scripts/addons_core/bl_pkg/bl_extension_utils.py index ff3738a9dd5..22af25ac516 100644 --- a/scripts/addons_core/bl_pkg/bl_extension_utils.py +++ b/scripts/addons_core/bl_pkg/bl_extension_utils.py @@ -1343,7 +1343,7 @@ def pkg_manifest_params_compatible_or_error( return None -def repository_filter_packages( +def repository_parse_data_filtered( data: List[Dict[str, Any]], *, repo_directory: str, @@ -1352,6 +1352,10 @@ def repository_filter_packages( ) -> Dict[str, PkgManifest_Normalized]: pkg_manifest_map = {} for item in data: + if not isinstance(item, dict): + error_fn(Exception("found non dict item in repository \"data\", found {:s}".format(str(type(item))))) + continue + if (pkg_idname := repository_id_with_error_fn( item, repo_directory=repo_directory, @@ -1531,7 +1535,7 @@ class _RepoDataSouce_JSON(_RepoDataSouce_ABC): data = RepoRemoteData( version=data_dict.get("version", "v1"), blocklist=data_dict.get("blocklist", []), - pkg_manifest_map=repository_filter_packages( + pkg_manifest_map=repository_parse_data_filtered( data_dict.get("data", []), repo_directory=os.path.dirname(self._filepath), filter_params=self._filter_params, diff --git a/scripts/addons_core/bl_pkg/cli/blender_ext.py b/scripts/addons_core/bl_pkg/cli/blender_ext.py index a1450aca18e..66744659f48 100755 --- a/scripts/addons_core/bl_pkg/cli/blender_ext.py +++ b/scripts/addons_core/bl_pkg/cli/blender_ext.py @@ -2608,6 +2608,9 @@ def pkg_repo_data_from_json_or_error(json_data: Dict[str, Any]) -> Union[PkgRepo if not isinstance((data := json_data.get("data", [])), list): return "expected \"data\" to be a list" + for item in data: + if not isinstance(item, dict): + return "expected \"data\" contain dictionary items" result_new = PkgRepoData( version=version,