Bad error handling for ill-formatted platforms
Metadata
Current evaluation
Crash when platforms is incorrectly specified as a list instead of a mapping; requests a user-friendly error message instead of an AttributeError traceback.
Suggested action: keep open
Reason: The issue reports a clear crash (AttributeError: 'list' object has no attribute 'items') when platforms is malformed. Adding a type check to raise a descriptive validation error is straightforward. The traceback indicates the code resides in craft-application, so the fix may require an upstream patch or dependency update.
Evaluated by: mr-cal-bot
Impact:
30
Quick Win:
22
Complexity:
20
Confidence:
85
Actionability:
90
Issue body
### Check existing issues
- [x] I've verified that this bug isn't described by any existing issues.
### Bug description
A crash trace is displayed if `platforms` members are declared as a list. A nicer, helpful error message should be displayed instead.
### Steps to reproduce
Create a core26 snapcraft.yaml declaring platforms as a list.
### Environment
core26 managed build with stable snapcraft (9.1.4)
### snapcraft.yaml
```yaml
platforms:
- amd64:
- arm64:
```
### Log output
```shell
$ snapcraft pack --verbose
Traceback (most recent call last):
File "/snap/snapcraft/19274/bin/snapcraft", line 12, in <module>
sys.exit(main())
^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/snapcraft/application.py", line 358, in main
return app.run()
^^^^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/application.py", line 557, in run
self._initialize_craft_parts()
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/application.py", line 657, in _initialize_craft_parts
self._set_plugin_group()
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/application.py", line 639, in _set_plugin_group
build_plan = self.services.get("build_plan").plan()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/services/buildplan.py", line 64, in plan
self.__plan = self.create_build_plan(
^^^^^^^^^^^^^^^^^^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/services/buildplan.py", line 144, in create_build_plan
raw_project["platforms"] = project_service.get_platforms()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/services/project.py", line 286, in get_platforms
self.__platforms = self._preprocess_platforms(raw_project["platforms"])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/services/project.py", line 260, in _preprocess_platforms
cls._vectorise_platforms(platforms)
File "/snap/snapcraft/19274/lib/python3.12/site-packages/craft_application/services/project.py", line 227, in _vectorise_platforms
for name, data in platforms.items():
^^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'items'
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b |
Impact:
30
Quick Win:
22
Complexity:
20
Confidence:
85
Actionability:
90
|
keep open | Crash when platforms is incorrectly specified as a list instead of a mapping; requests a user-friendly error message instead of an AttributeError traceback. |
Update history
| Date | Change |
|---|---|
| created |
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1217 Bad error handling for ill-formatted platforms | craft-application | open | Crash with AttributeError when platforms is declared as a list instead of a dict in snapcraft.yaml. Triaged, with a developer interested in fixing it. |